不区分大小写的排序规则仍然使用区分大小写的比较
Case insensitive collation still uses case sensitive comparison
根据 postgress documentation 可以创建排序规则以在比较操作期间忽略大小写。
CREATE COLLATION IF NOT EXISTS case_insensitive (provider = icu, locale = 'und-u-ks-level2', deterministic = false);
create table if not exists testTable(
id int generated always as identity primary key,
test_name text collate case_insensitive not null unique
);
insert into testTable(test_name) VALUES('Foo');
select * from testTable WHERE test_name = 'foo'
最后的 select 并不像我期望的那样 return 该行。
这个 StackExchange 问题提到 windows icu 可能是旧的:https://dba.stackexchange.com/questions/255780/case-insensitive-collation-still-comparing-case-sensitive/255783#255783,但即使使用建议的解决方法也不会产生任何结果。
CREATE COLLATION case_insensitive(
provider = 'icu',
locale = '@colStrength=secondary',
deterministic = false
);
我不想设置整个数据库的排序规则,而只是针对单个列。
Windows 10 Version 10.0.19044 Build 19044
PostgreSQL 12.9, compiled by Visual C++ build 1914, 64-bit
以上示例代码适用于 PostgreSQL 14.2, compiled by Visual C++ build 1914, 64-bit
。
尽管说明直接取自 12.9 文档,但它确实取决于 postgres 版本。
根据 postgress documentation 可以创建排序规则以在比较操作期间忽略大小写。
CREATE COLLATION IF NOT EXISTS case_insensitive (provider = icu, locale = 'und-u-ks-level2', deterministic = false);
create table if not exists testTable(
id int generated always as identity primary key,
test_name text collate case_insensitive not null unique
);
insert into testTable(test_name) VALUES('Foo');
select * from testTable WHERE test_name = 'foo'
最后的 select 并不像我期望的那样 return 该行。
这个 StackExchange 问题提到 windows icu 可能是旧的:https://dba.stackexchange.com/questions/255780/case-insensitive-collation-still-comparing-case-sensitive/255783#255783,但即使使用建议的解决方法也不会产生任何结果。
CREATE COLLATION case_insensitive(
provider = 'icu',
locale = '@colStrength=secondary',
deterministic = false
);
我不想设置整个数据库的排序规则,而只是针对单个列。
Windows 10 Version 10.0.19044 Build 19044
PostgreSQL 12.9, compiled by Visual C++ build 1914, 64-bit
以上示例代码适用于 PostgreSQL 14.2, compiled by Visual C++ build 1914, 64-bit
。
尽管说明直接取自 12.9 文档,但它确实取决于 postgres 版本。