相关疑难解决方法(0)

Postgres 12 不区分大小写的比较

我正在尝试将 C# 应用程序 (+EF6) 使用的 SQL Server DB 移动到 Postgres 12,但我在进行不区分大小写的字符串比较方面运气不佳。现有的 SQL Server 数据库使用 SQL_Latin1_General_CP1_CI_AS 排序规则,这意味着所有 WHERE 子句都不必担心大小写。

我知道 CIText 以前是这样做的,但现在被非确定性排序规则所取代。

我创建了这样一个排序规则;

CREATE COLLATION ci (provider = icu, locale = 'und-u-ks-level2', deterministic = false);
Run Code Online (Sandbox Code Playgroud)

并且当它以每列为基础应用于 CREATE TABLE 时,它确实有效 - 忽略大小写。

CREATE TABLE casetest (
id serial NOT NULL,
code varchar(10) null COLLATE "ci",
CONSTRAINT "PK_id" PRIMARY KEY ("id"));
Run Code Online (Sandbox Code Playgroud)

但是从我读过的内容来看,它必须应用于每个 varchar 列,并且不能在整个数据库中全局设置。

这样对吗?

由于杂乱,我不想在任何地方使用 .ToLower() 并且不会使用列上的任何索引。

我尝试修改 pg_collat​​ion 中预先存在的“默认”排序规则以匹配“ci”排序规则的设置,但没有效果。

提前致谢。PG

postgresql locale collation case-insensitive icu

8
推荐指数
1
解决办法
2410
查看次数

Linux上的PostgreSQL 10-LC_COLLATE语言环境en_US.utf-8无效

错误:无效的语言环境名称:“ en_US.utf-8”

在PostgreSQL 10上运行Ubuntu服务器18.04 Beta 2

在运行适用于9.5的数据库创建脚本时,我现在看到'en_US.UTF-8'作为语言环境的问题:

CREATE DATABASE db WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'en_US.UTF-8' LC_CTYPE = 'en_US.UTF-8';
Run Code Online (Sandbox Code Playgroud)

我知道这可能是多余的,因为我知道默认值为'en_US.etf-8'。删除LC_COLLATE和LC_CTYPE参数使我运行脚本。

那么对于V 10,语言环境定义是否有所改变?还是现在正在发生其他事情?我在Postgres 10手册中找不到任何相关内容。

postgresql

3
推荐指数
4
解决办法
7268
查看次数

标签 统计

postgresql ×2

case-insensitive ×1

collation ×1

icu ×1

locale ×1