我与所有国家的表格有三种语言:英语,俄语和乌克兰语。在前两种语言排序是可以的。但在乌克兰国家的名字排序是不行的。
在前两个地方,它有两个字母'є'
(ABC中的第8个位置)和'і'
(ABC中的第12个位置),所有下一个字母都排序正常。
如何防止这种行为?数据库编码是utf-8。
答案 0 :(得分:3)
UTF-8对“语言”一无所知。要按字母排序对Postgres有任何意义,您需要set a locale。你的问题根本没有提到语言环境所以我猜你只是使用你的默认语言环境进行排序(可能是英语或俄语)。
如果您已经在使用区域设置,那么我建议您提供客户端/服务器区域设置的详细信息,因为可能存在错误。
答案 1 :(得分:3)
如果您使用的是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/