【发布时间】:2012-01-28 07:50:00
【问题描述】:
我有三种语言的所有国家/地区的表格:英语、俄语和乌克兰语。在前两种语言上排序是可以的。但是对乌克兰国家的名字排序是不行的。
在前两个位置,它代表两个字母 'є'(ABC 中的第 8 位)和 'і'(ABC 中的第 12 位),并且所有接下来的字母都排序良好。
如何防止这种行为? DB编码为utf-8。
【问题讨论】:
标签: postgresql sorting
我有三种语言的所有国家/地区的表格:英语、俄语和乌克兰语。在前两种语言上排序是可以的。但是对乌克兰国家的名字排序是不行的。
在前两个位置,它代表两个字母 'є'(ABC 中的第 8 位)和 'і'(ABC 中的第 12 位),并且所有接下来的字母都排序良好。
如何防止这种行为? DB编码为utf-8。
【问题讨论】:
标签: postgresql sorting
如果您使用的是 9.1,则可以将用于排序的排序规则添加到您的 ORDER BY 子句中:
SELECT *
FROM your_table
ORDER BY your_column COLLATE "ua_UA"
排序规则的名称取决于您的操作系统 - 不确定乌克兰的正确名称是什么。但我想你明白了。
您可能还想阅读这篇博文:
http://www.depesz.com/index.php/2011/03/04/waiting-for-9-1-per-column-collation-support/
【讨论】:
UTF-8 对“语言”一无所知。要使字母排序对 Postgres 有意义,您需要 set a locale。您的问题根本没有提到语言环境,所以我猜您只是使用默认语言环境(可能是英语或俄语)进行排序。
如果您已经在使用区域设置,那么我建议提供您的客户端/服务器区域设置的详细信息,因为那里可能存在错误。
【讨论】: