0

我有一个如下所示的 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)的容器。

有什么线索吗?

4

0 回答 0