【发布时间】:2020-03-28 19:58:17
【问题描述】:
我正在尝试将 C# 应用程序 (+EF6) 使用的 SQL Server DB 移动到 Postgres 12,但我没有太多运气让不区分大小写的字符串比较正常工作。现有的 SQL Server db 使用 SQL_Latin1_General_CP1_CI_AS 排序规则,这意味着所有 WHERE 子句都不必担心大小写。
我了解 CIText 是以前执行此操作的方法,但现在已被非确定性排序规则所取代。
我创建了这样一个排序规则;
CREATE COLLATION ci (provider = icu, locale = 'und-u-ks-level2', deterministic = false);
当它按列应用于 CREATE TABLE 时,它确实有效 - 忽略大小写。
CREATE TABLE casetest (
id serial NOT NULL,
code varchar(10) null COLLATE "ci",
CONSTRAINT "PK_id" PRIMARY KEY ("id"));
但是根据我的阅读,它必须应用于每个 varchar 列,并且不能在整个数据库中全局设置。
这是正确的吗?
由于混乱,我不想在任何地方使用 .ToLower() 并且列上的任何索引都不会被使用。
我尝试修改 pg_collation 中预先存在的“默认”排序规则以匹配“ci”排序规则的设置,但没有效果。
提前致谢。 PG
【问题讨论】:
标签: postgresql locale collation case-insensitive icu