MySQL。 json 包含 utf-8 字符串的命令错误
MySQL. Wrong order by json fied containing utf-8 string
我有一个类型为 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'
原来数据库的排序规则和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
我有一个类型为 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'
原来数据库的排序规则和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