我有一个版本9.6.2 postgresql数据库,编码UTF8和整理en_GB.UTF8。我的一张桌子只有一个包含日文平假名字符的字段。问题是通过SQL(... ORDER BY [字段名] ...)以正常方式对此字段进行排序不会产生预期的(至少是我)结果。相反,排序就好像行首先按(字段内容的)长度排序,然后才按字符排序。例如,而不是得到:
あめうえおとこかわりきしひ
正如我所料,订单出现为:
きしひあめうえおとこかわり
我错过了什么?
答案 0 :(得分:1)
尝试明确设置排序规则C
?
t=# with a as (select string_to_array('あめ うえ おとこ かわり き し ひ' COLLATE "en_GB.UTF-8",' ') a) select unnest(a) from a order by 1;
unnest
--------
き
し
ひ
あめ
うえ
おとこ
かわり
(7 rows)
t=# with a as (select string_to_array('あめ うえ おとこ かわり き し ひ' COLLATE "C",' ') a) select unnest(a) from a order by 1;
unnest
--------
あめ
うえ
おとこ
かわり
き
し
ひ
(7 rows)