MySQL的。 json文件错误的顺序包含utf-8字符串

时间:2019-05-17 20:38:24

标签: mysql mysql-json

我有一个json类型的字段title,其中包含不同语言环境的翻译。看起来像

{'en'=>'Title', 'uk'=>'Заголовок'}

我正在尝试通过翻译订购记录

select id, slug, title->>'$.uk' as locale_title from blog_posts
order by locale_title

它适用于带有拉丁符号的en语言环境,但适用于带有西里尔字母的uk(乌克兰语)语言环境,我得到了错误的顺序,如і, а, б, я。 对于其他文本字段(不是json),排序按预期进行а, б, і, я

其他信息

MySQL版本:5.7.25

数据库排序规则:'utf8mb4_unicode_ci'

1 个答案:

答案 0 :(得分:1)

事实证明,数据库的排序规则和json运算符的排序规则是不同的:

collation(title->>'$.uk') //utf8mb4_bin
collation(other_field) //utf8mb4_unicode_ci

要解决我的问题,我应该为json值显式设置utf8mb4_unicode_ci排序规则:

select id, slug, title->>'$.uk' as locale_title from blog_posts
order by locale_title collate utf8mb4_unicode_ci