所以,我最近意识到对于postgres来说,排序规则是一个很大的问题,并且许多评论都将OSX /语言环境支持称为“破坏”,这并没有启发我。 出于这个问题的目的,我忽略了排序规则的表/列默认方面,并明确指定它。
两者都很常见:
# 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的正确答案吗?
答案 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顺序。但这是你和你的操作系统供应商之间的。