postgres整理差异。 osx v ubuntu

时间:2013-11-14 00:59:02

标签: macos postgresql ubuntu utf-8 collation

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

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

两者都很常见:

  # 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的“破碎”指控。所以我担心我的一生都错了,以为逗号在连字符之前命令, 但是输入一个合理依赖的text和unicode等仲裁器。 在ubuntu服务器上产生:

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

所以,我感觉很像这种整理概念在我的ubuntu服务器上比我的osx服务器更加破碎。但我没有“适当”的整理来创建我的“en_US.UTF-8”整理从ala“创建整理”,所以我迷失了如何创建奇偶校验,或哪个答案(真/假)我应该用作正确的参考。 (除了亲自支持ascii命令,毕竟是ascii字符)。

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

1 个答案:

答案 0 :(得分:6)

Default Unicode Collation 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顺序。但这是你和你的操作系统供应商之间的。