在postgresql中为平假名中的日语单词排序

时间:2017-05-02 19:19:57

标签: postgresql sorting unicode

我有一个版本9.6.2 postgresql数据库,编码UTF8和整理en_GB.UTF8。我的一张桌子只有一个包含日文平假名字符的字段。问题是通过SQL(... ORDER BY [字段名] ...)以正常方式对此字段进行排序不会产生预期的(至少是我)结果。相反,排序就好像行首先按(字段内容的)长度排序,然后才按字符排序。例如,而不是得到:

あめうえおとこかわりきしひ

正如我所料,订单出现为:

きしひあめうえおとこかわり

我错过了什么?

1 个答案:

答案 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)