6

我有两个 Postgres 9.1 实例:一个是本地的,通过 OS X 上的 Postgres.app 安装,另一个是远程的 Heroku。我已经确保这lc_collateen_US.UTF-8两台机器上,但我仍然看到两者之间的不同行为。

在我的本地实例上,SELECT 'i' > 'N'返回t,而远程返回f。鉴于我已经检查lc_*了这两个系统,是什么解释了我所看到的差异?

4

1 回答 1

10

从 Unicode 的角度来看,大小写排序是一种定制。摘自http://www.unicode.org/reports/tr10

案例订购。一些字典和作者在小写之前整理大写,而其他人则使用相反的顺序,因此需要可自定义偏好。有时案件排序是由政府强制执行的,例如在丹麦。通常它只是一个定制或用户偏好。

Mac OS X 的大小写顺序与 Heroku 使用的 OS 不同。在 Mac OS X 上:

$ LC_CTYPE=en_US.UTF-8 sort << EOF
> i
> N
> EOF

产生:


_

Ubuntu 12.04 上完全相同的命令和相同的数据产生:


N

这与 PostgreSQL 无关,只是它使用操作系统进行整理,因此不同操作系统之间的这些不幸差异会影响数据库。

PostgreSQL 10 和 ICU

从版本 10 开始,PostgreSQL 可以使用ICU 库提供的排序规则,用于使用ICU编译的服务器。这些排序规则可以跨操作系统进行一致的排序。

于 2012-11-13T23:37:23.690 回答