PostgreSQL排序用西里尔“呃”

前端之家收集整理的这篇文章主要介绍了PostgreSQL排序用西里尔“呃”前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
请看看,请:
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依赖于操作系统的区域设置进行排序.

看看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错误.

原文链接:https://www.f2er.com/postgresql/192510.html

猜你在找的Postgre SQL相关文章