我有两个Postgres 9.1实例:一个本地,通过OS X上的Postgres.app安装,一个远程,在Heroku上。我确保两台机器上lc_collate
都是en_US.UTF-8
,但两者之间仍然看到不同的行为。
在我的本地实例上,SELECT 'i' > 'N'
返回t
,而远程返回f
。鉴于我已经在两个系统上都检查了lc_*
,我看到的区别是什么?
答案 0 :(得分:7)
从Unicode的角度来看,案例排序是一种定制。 摘录自http://www.unicode.org/reports/tr10:
案件订购。一些词典和作者之前整理大写字母 小写,而其他人使用反向,所以需要优先 定制的。有时,案件订购是由 政府,如丹麦。通常它只是一个定制或用户 偏好。
Mac OS X只是具有与Heroku使用的操作系统不同的案例排序。在Mac OS X上:
$ LC_CTYPE=en_US.UTF-8 sort << EOF
> i
> N
> EOF
产生
<磷>氮
我
Ubuntu 12.04上完全相同的命令和相同的数据产生:
我
N
这与PostgreSQL没有任何关系,除了它使用操作系统进行整理,因此不同操作系统影响数据库之间存在这些不幸的差异。
从版本10开始,对于使用collations provided by the ICU library编译的服务器,PostgreSQL可能会使用ICU。这些排序规则可以跨操作系统进行一致排序。