3

据我了解,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 风格的正确排序?

4

1 回答 1

1

正如您所指出的,Postgres 依赖于操作系统来提供整理,除了直接挂接到 ICU 之外,Postgres 几乎无法对事情进行整理。

多年来,这样做一直是一个反复讨论的话题,但并不是一项简单的任务:

http://wiki.postgresql.org/wiki/Todo:ICU

于 2013-05-02T16:21:19.793 回答