请看看,请:
WITH toks AS ( SELECT tok FROM unnest('{ь,а,чь,ча,чль,чла}'::text[]) AS tok ORDER BY tok COLLATE "uk_UA" ) SELECT ROW_NUMBER() OVER() AS "#",tok FROM toks ORDER BY tok COLLATE "uk_UA"
Postgresql 9.3(ubuntu)给我这个结果:
# | tok ---+----- 1 | а 2 | ча 3 | чль 4 | чла 5 | чь 6 | ь (6 rows)
这里排列1,2,5和6被正确排序(“ь”在“а”之后),而第3行和第4行被错误排序(“а”后面的“ь”).
所有的信都是西里尔字母,我检查了很多次.
请,怎么了,如何解决.(
更新:这是最近固定在主流的错误:https://sourceware.org/bugzilla/show_bug.cgi?id=17293
UPDATE2:请注意我自己的答案.
Postgresql依赖于操作系统的区域设置进行排序.
原文链接:https://www.f2er.com/postgresql/192510.html看看Ubuntu 14.04如何排序该列表:
# locale-gen uk_UA.UTF-8 Generating locales... uk_UA.UTF-8... done Generation complete. # cat >file ь а чь ча чль чла # LC_ALL=uk_UA.UTF-8 sort file а ча чль чла чь ь
在评论中,你说这是不同的,但我在这里得到的是完全一样的顺序与您的查询.
事实上,чль来到чла,直觉上是奇怪的,但我不知道西里尔文.
您可以查看/usr/share / i18n / locales / uk_UA来定义区域设置,并将其作为locales软件包的ubuntu错误.