Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 有没有办法让PostgreSQL在使用语言进行排序时不折叠标点和空格?_Linux_Macos_Postgresql_Collation - Fatal编程技术网

Linux 有没有办法让PostgreSQL在使用语言进行排序时不折叠标点和空格?

Linux 有没有办法让PostgreSQL在使用语言进行排序时不折叠标点和空格?,linux,macos,postgresql,collation,Linux,Macos,Postgresql,Collation,据我所知,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'),

据我所知,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
MacOSX似乎尊重标点和空格,但随后使用POSIX/C风格的排序。OSX上具有相同设置的类似数据库返回

...ABc
ABC
Abc
a BC
abc
无论操作系统如何,我都希望返回一个正确的排序规则(以及显示)


有没有办法让Postgres安装在任何操作系统上,特别是Linux上,以观察ICU风格的正确排序?

正如您所指出的,Postgres依赖操作系统提供排序,除了直接连接到ICU之外,Postgres对如何进行排序几乎无能为力

这么做多年来一直是一个反复讨论的话题,但不是一项微不足道的任务:


我考虑过的一个选项是使用一种能够正确排序的语言(可能是Java)创建索引。对此有什么见解或警告吗?我自己从未尝试过,但可能有一种方法可以创建自定义类型,例如ICUString,并在其上编制BTree索引。不过,这需要做很多工作。
...ABc
a BC
abc
Abc
ABC