向 PostgreSQL 添加不区分大小写的排序规则

Posted

技术标签:

【中文标题】向 PostgreSQL 添加不区分大小写的排序规则【英文标题】:Add case insensitive collation to PostgreSQL 【发布时间】:2013-06-29 14:41:23 【问题描述】:

默认情况下,PostgreSQL 没有区分大小写的排序规则。它的文档描述了一种基于操作系统语言环境添加新排序规则的方法,例如:

http://www.postgresql.org/docs/9.1/static/sql-createcollation.html

但是创建的排序规则是区分大小写的。

我的问题是:如何向 PostgreSQL 服务器添加不区分大小写的排序规则?

有人能描述一下工作流程吗?

我无法在网上找到任何参考资料,而有些人提到这是可能的。 我已经在 Windows 上使用 v9.1 - Debian GNU/Linux 和 v9.2 进行了测试。

只是为了澄清我知道:

PostgreSQL CITEXT 附加数据类型 LOWER/UPPER 用于搜索和索引。

这些不是我想要的解决方案。

【问题讨论】:

你能给出你不想要的解决方案的理由吗?也许还有另一种你没有想到的方式?我可以猜到lower/upper 的问题,但citext 避免了这些问题:与自定义排序规则一样,它调整了= 的含义,因此不区分大小写对调用代码是透明的。 我完全同意你的问题。我自己也需要同样的东西。你解决了吗?如果是,请添加您自己的答案。 【参考方案1】:

“Nondeterministic collations”已添加到版本 12:

“非确定性排序规则的最典型用例可能是 不区分大小写的比较。在次要力量,琴弦 大小写不同比较相等”

【讨论】:

【参考方案2】:

好像不是possible within Postgres iteself:

不是来自 Postgres 项目——我们只是使用由 操作系统。

【讨论】:

我不在乎排序规则定义来自哪里。它可能来自操作系统,从网络下载等。我只是希望它们可用于数据库。

以上是关于向 PostgreSQL 添加不区分大小写的排序规则的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL 是不是支持“不区分重音”排序规则?

Postgresql查询时不区分大小写

PostgreSQL:不区分大小写的字符串比较

使用postgresql TEXT类型按字段排序时如何删除重复项?

如何使用 PredicateBuilder、EF Core 5 和 Postgresql 10+ 执行不区分大小写和重音的 LIKE(子字符串)查询?

如何在 C# 中添加不区分大小写的表单字段验证?