向 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 TEXT类型按字段排序时如何删除重复项?
如何使用 PredicateBuilder、EF Core 5 和 Postgresql 10+ 执行不区分大小写和重音的 LIKE(子字符串)查询?