MySQL.Неправильный порядок по json fied, содержащему строку utf-8 - PullRequest
0 голосов
/ 17 мая 2019

У меня есть поле title типа json, которое содержит переводы для разных локалей. Похоже

{'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 Ответ

1 голос
/ 18 мая 2019

Оказывается, что параметры сортировки базы данных и параметры json различны:

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

Чтобы исправить мою проблему, я должен явно установить utf8mb4_unicode_ci сопоставление для значения json:

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