Postgresql 错误,无法找到具有完全相同字符串的行

Postgresql bug, can't find the row with exact same string

我遇到的一个小难题。

我有一个 table playerlogin 列 (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 是这些类别。"