Postgresql 错误,无法找到具有完全相同字符串的行
Postgresql bug, can't find the row with exact same string
我遇到的一个小难题。
我有一个 table player
和 login
列 (varchar(255))。
这些行由 Java 代码插入。
我有一个 id = 173 login = PLN2test 的记录:
当我通过以下查询搜索此记录时,
SELECT login FROM player WHERE login = 'PLN2test'
甚至:
SELECT login FROM player WHERE login = (SELECT login FROM player WHERE id = 173)
我得到零结果!
但是当我尝试时:
SELECT login FROM player WHERE login LIKE '%PLN2test'
或
SELECT login FROM player WHERE login LIKE 'PLN2test%'
我得到我的记录。
你能告诉我为什么会这样吗?
postgres 端是否存在已知错误?
我如何调试查询执行并理解为什么会出现 returns 意外结果?
P.S。 SELECT length(login) FROM player WHERE id = 173
给我 8
show lc_collate;
lc_collate
------------
en_US.utf8
(1 row)
show client_encoding ;
client_encoding
-----------------
UTF8
(1 row)
OS版本:Ubuntu20.04
我的同事最近好像刚刚将整理类型从 C.UTF-8
更改为 en_US.utf8)
。这会导致这种行为吗?以及现在如何将数据迁移到新类型?
您发现您不应该手动更改系统目录 (pg_database)。每个 Locale:“创建数据库时,某些语言环境类别的值必须固定。您可以对不同的数据库使用不同的设置,但是一旦创建了数据库,您就不能再为该数据库更改它们。LC_COLLATE 和 LC_CTYPE 是这些类别。"
我遇到的一个小难题。
我有一个 table player
和 login
列 (varchar(255))。
这些行由 Java 代码插入。
我有一个 id = 173 login = PLN2test 的记录:
当我通过以下查询搜索此记录时,
SELECT login FROM player WHERE login = 'PLN2test'
甚至:
SELECT login FROM player WHERE login = (SELECT login FROM player WHERE id = 173)
我得到零结果!
但是当我尝试时:
SELECT login FROM player WHERE login LIKE '%PLN2test'
或
SELECT login FROM player WHERE login LIKE 'PLN2test%'
我得到我的记录。
你能告诉我为什么会这样吗?
postgres 端是否存在已知错误?
我如何调试查询执行并理解为什么会出现 returns 意外结果?
P.S。 SELECT length(login) FROM player WHERE id = 173
给我 8
show lc_collate;
lc_collate
------------
en_US.utf8
(1 row)
show client_encoding ;
client_encoding
-----------------
UTF8
(1 row)
OS版本:Ubuntu20.04
我的同事最近好像刚刚将整理类型从 C.UTF-8
更改为 en_US.utf8)
。这会导致这种行为吗?以及现在如何将数据迁移到新类型?
您发现您不应该手动更改系统目录 (pg_database)。每个 Locale:“创建数据库时,某些语言环境类别的值必须固定。您可以对不同的数据库使用不同的设置,但是一旦创建了数据库,您就不能再为该数据库更改它们。LC_COLLATE 和 LC_CTYPE 是这些类别。"