我有一个如下所示的 SQL 表(不相关部分除外):
# \d users
Table "public.users"
Column | Type | Collation | Nullable | Default
----------------+-----------------------------+-----------+----------+-----------------------------------
id | integer | | not null | nextval('users_id_seq'::regclass)
name | character varying(64) | | not null |
Indexes:
"users_pkey" PRIMARY KEY, btree (id)
"users_name_key" UNIQUE CONSTRAINT, btree (name)
现在我遇到了这种非常奇怪的行为,我无法选择特定的行(我知道它在那里)。但是,如果我使用类似trim
,lower
或 ILIKE (不带通配符)之类的函数,则选择有效。所有这些功能都不会改变我过滤的值。它已经是小写的,修剪过的并且完全是 ASCII:
-- Does not work (no results returned):
SELECT * FROM users WHERE name = 'user@somedomain.com';
SELECT * FROM users WHERE name LIKE 'user@somedomain.com';
-- Works (selects the expected row):
SELECT * FROM users WHERE name LIKE '%user@somedomain.com';
SELECT * FROM users WHERE name LIKE 'user@somedomain.com%';
SELECT * FROM users WHERE name ILIKE 'user@somedomain.com';
SELECT * FROM users WHERE lower(name) = 'user@somedomain.com';
SELECT * FROM users WHERE trim(name) = 'user@somedomain.com';
尝试将值导出为bytea
也没有显示诸如空字节或其他不可打印字符之类的内容。奇怪的部分是查询曾经工作并且仍然在另一台具有完全相同的 PostgreSQL 版本和数据的机器上工作(从不工作的机器复制)。我使用 PostgreSQL 版本 14.0,作为来自官方 Docker Hub 帐户(不是 Alpine)的容器。
有什么线索吗?