saroff Asked: 2016-02-08 23:48:45 +0800 CST2016-02-08 23:48:45 +0800 CST 2016-02-08 23:48:45 +0800 CST 没有指定 COLLATION 的 PostgreSQL 的默认行为是什么? 772 如果我没有在外部指定排序规则,PostgreSQL 的默认行为是什么?主要问题之一,是否区分大小写? postgresql collation 1 个回答 Voted Best Answer Md Haidar Ali Khan 2016-02-09T00:40:12+08:002016-02-09T00:40:12+08:00 排序规则是将 SQL 名称映射到操作系统区域设置的 SQL 模式对象。无论您应该设置什么作为数据库的默认排序规则设置。默认情况下,排序规则会隐式选择您的数据库。 然而,在 PostgreSQL 中,最初的排序规则名称集是平台相关的。 没有不区分大小写的排序规则,但有citext 扩展名。 在 PostgreSQL 中进行不区分大小写匹配的标准方法是在比较值时使用 lower 函数,例如 SELECT * FROM tab WHERE lower(col) = LOWER(?); 这工作得相当好,但有许多缺点: 它使您的 SQL 语句变得冗长,并且您始终必须记住在列和查询值上都使用 lower。 它不会使用索引,除非您使用 lower 创建函数索引。 如果将列声明为 UNIQUE 或 PRIMARY KEY,则隐式生成的索引区分大小写。所以它对于不区分大小写的搜索是没有用的,它不会不区分大小写强制唯一性。 从文档中: 数据类型允许您在 SQL 查询中消除对 lower的citext调用,并允许主键不区分大小写。citext是 locale-aware 的,就像text,这意味着大小写字符的匹配取决于数据库LC_CTYPE设置的规则。同样,此行为与在查询中使用 lower 相同。但是因为它是由数据类型透明地完成的,所以您不必记住在查询中做任何特殊的事情。 供您参考:PostgreSQL 文档和StackOverFlow 参考这里
排序规则是将 SQL 名称映射到操作系统区域设置的 SQL 模式对象。无论您应该设置什么作为数据库的默认排序规则设置。默认情况下,排序规则会隐式选择您的数据库。
没有不区分大小写的排序规则,但有citext 扩展名。
在 PostgreSQL 中进行不区分大小写匹配的标准方法是在比较值时使用 lower 函数,例如
这工作得相当好,但有许多缺点:
它使您的 SQL 语句变得冗长,并且您始终必须记住在列和查询值上都使用 lower。
它不会使用索引,除非您使用 lower 创建函数索引。
如果将列声明为 UNIQUE 或 PRIMARY KEY,则隐式生成的索引区分大小写。所以它对于不区分大小写的搜索是没有用的,它不会不区分大小写强制唯一性。
从文档中:
供您参考:PostgreSQL 文档和StackOverFlow 参考这里