据我所知,PostgreSQL 将排序委托(delegate)给底层操作系统的 strcoll() 函数,显然大多数(如果不是全部)Linux 安装都利用了这样一个事实,即在以 UTF- 8.
例如,我在 CentOS 6.4 上的 Postres 9.2 中有一个数据库,
ENCODING='UTF8'
LC_COLLATE='en_US.UTF8'
LC_CTYPE='en_US.UTF8'
然后你运行查询
select * from (values('abc'),('ABC'),('Abc'),('...ABc'),('a BC')) x order by 1;
结果是
abc
a BC
Abc
...ABc
ABC
Mac OS X 似乎支持标点符号和空格,但随后使用了 POSIX/C 风格的排序。在 OS X 上具有相同设置的类似数据库返回
...ABc
ABC
Abc
a BC
abc
无论操作系统如何,我都希望返回正确的排序规则(并显示 ICU Demo Project)
...ABc
a BC
abc
Abc
ABC
有什么方法可以在任何操作系统(尤其是 Linux)上安装 Postgres,以观察 ICU 风格的正确排序?
最佳答案
正如您所指出的,Postgres 依赖于操作系统来提供整理,除了直接连接到 ICU 之外,Postgres 几乎无能为力。
多年来,这样做一直是一个反复讨论的话题,但并不是一项微不足道的任务:
关于linux - 有没有办法让 PostgreSQL 在使用某种语言进行整理时不折叠标点符号和空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16342796/