sar*_*off 4 postgresql collation
如果我不在外部指定排序规则,PostgreSQL 的默认行为是什么?主要问题之一,是否区分大小写?
排序规则是将 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 参考这里
归档时间: |
|
查看次数: |
1545 次 |
最近记录: |