12

所以,我最近开始意识到排序规则在 postgres 上很重要,并且许多评论将 OSX / 语言环境支持称为“损坏”,这并没有启发我。出于这个问题的目的,我忽略了排序规则的表/列默认方面,并明确指定它。

  • 我的笔记本电脑是带有 postgres 9.2.4 的 osx
  • 我的服务器是带有 postgres 9.1.9 的 ubuntu

两者共有:

  # show lc_collate ;
   en_US.UTF-8
  # show lc_ctype ;
   en_US.UTF-8

在我的笔记本电脑上:

select ',' < '-' collate "en_US.UTF-8" as result;
  true

现在,我的服务器没有排序规则“en_US.UTF-8”,但它确实有“en_US.utf8”(我承认这不是一回事,尽管我希望它的行为相同)

select ',' < '-' collate "en_US.utf8" as result;
 false

所以,这就是我吓坏的地方。“C”命令总是说(对于两台机器)','小于'-',我的大脑会同意。

哪个 utf8 实现是正确的?如果有人能指出我的定义会有所帮助,因为大多数情况下我只能找到针对 osx 的“破碎”指控。所以我担心我一生都在错误地认为逗号在连字符之前排序,但是输入一个合理依赖的文本和unicode等python的仲裁器。在 ubuntu 服务器上产生:

>>> print u',' < u'-', ',' < '-'
True True

所以,我感觉这个排序规则概念在我的 ubuntu 服务器上比在我的 osx 服务器上更糟糕。但我没有“正确”排序规则来从 ala“创建排序规则”创建我的“en_US.UTF-8”排序规则,所以我不知道如何创建奇偶校验,或者哪个答案(真/假)我应该用作正确的参考。(除了个人支持 ascii 命令之外,毕竟是 ascii 字符)。

所以,简而言之,哪个是 en_US.UTF-8 的正确答案?

4

1 回答 1

6

Default Unicode Collat​​ion Element Table中,您可以看到以下两个条目:

002C  ; [*0220.0020.0002] # COMMA
002D  ; [*020D.0020.0002] # HYPHEN-MINUS

这里,COMMA 的主权重大于 HYPHEN-MINUS 的主权重,因此 HYPHEN-MINUS 排在 COMMA 之前。

请注意,这是根据带有默认权重的 Unicode 排序算法的预期排序顺序。如果您希望按 ASCII 字节值排序,则会得到不同的顺序。还有其他有效的命令。但是,如果语言环境被命名为“en_US.UTF-8”(或“en_US.utf8”,同样的东西),那么您可能会期望 Unicode 顺序。但那是你和你的操作系统供应商之间的事。

于 2013-11-14T04:10:24.900 回答