据我了解,PostgreSQL 将整理委托给底层操作系统的 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 演示项目显示)
...ABc
a BC
abc
Abc
ABC
有没有办法让 Postgres 安装在任何操作系统上,尤其是 Linux,以观察 ICU 风格的正确排序?