PostgreSQL 没有指定 COLLATION 的默认行为是什么?

sar*_*off 4 postgresql collation

如果我不在外部指定排序规则,PostgreSQL 的默认行为是什么?主要问题之一,是否区分大小写?

Md *_*han 5

排序规则是将 SQL 名称映射到操作系统区域设置的 SQL 模式对象。无论您将设置为数据库的默认排序规则设置。默认情况下,该排序规则将选择您的数据库。

尽管如此,在 PostgreSQL 中,初始的排序规则名称集是平台相关的。

没有不区分大小写的排序规则,但有citext 扩展名

在 PostgreSQL 中进行不区分大小写匹配的标准方法是在比较值时使用 lower 函数,例如

SELECT * FROM tab WHERE lower(col) = LOWER(?);
Run Code Online (Sandbox Code Playgroud)

这工作得相当好,但有许多缺点:

它使您的 SQL 语句变得冗长,并且您始终必须记住在列和查询值上都使用较低。

它不会使用索引,除非您使用lower创建功能索引。

如果将列声明为 UNIQUE 或 PRIMARY KEY,则隐式生成的索引区分大小写。所以它对于不区分大小写的搜索是没有用的,并且它不会不区分大小写地强制唯一性。

从文档:

citext数据类型,您可以消除调用SQL查询来降低,并允许主键是不区分大小写。citext是locale-aware,就像 一样text,这意味着大小写字符的匹配取决于数据库LC_CTYPE设置的规则。同样,此行为与在查询中使用 lower 相同。但是因为它是由数据类型透明地完成的,所以您不必记住在查询中做任何特殊的事情。

供您参考:PostgreSQL 文档StackOverFlow 参考这里