postgresql – 字符串排序顺序(LC_COLLATE和LC_CTYPE)

显然,自版本8.4起,PostgreSQL允许每个数据库使用不同的语言环境

所以我去了文档阅读有关语言环境的内容(http://www.
postgresql.org/docs/8.4/static/locale.html).

字符串排序顺序是我特别感兴趣的(我希望字符串排序为’A a b c D d’而不是’A B C … Z a b c’).

问题1:创建数据库时是否只需要设置LC_COLLATE(字符串排序顺序)?

我还读到了关于LC_CTYPE(字符分类(什么是字母?它的大写等价?))

问题2:有人可以解释这意味着什么吗?

最佳答案 您描述的排序顺序是大多数语言环境中的标准.

试试吧:

SELECT regexp_split_to_table('D d a A c b', ' ') ORDER BY 1;

使用initdb初始化数据库集群时,可以使用–locale = some_locale选择语言环境.就我而言,它是–locale = de_AT.UTF-8.如果未指定任何语言环境继承自环境 – 将使用您当前的系统区域设置.

群集的模板数据库将设置为该区域设置.创建新数据库时,它会从模板继承设置.通常你不必担心任何事情,这一切都有效.

阅读CREATE DATABASE章节了解更多信息.
如果您想加快索引的文本搜索速度,请务必阅读有关operator classes的内容.
 所有指向版本8.4的链接,正如您特别要求的那样.

在PostgreSQL 9.1或更高版本中,有collation support允许更灵活地使用归类:

The collation feature allows specifying the sort order and character
classification behavior of data per-column, or even per-operation.
This alleviates the restriction that the LC_COLLATE and LC_CTYPE
settings of a database cannot be changed after its creation.

点赞