MySQL, после миграции Latin1 в UTF8, поиск LIKE больше не работает. Перепробовал все сопоставления UTF8 - PullRequest
0 голосов
/ 29 февраля 2012

первый вопрос здесь.Давно скрывался, действительно ценю огромную помощь, которую предлагает этот сайт.

Итак, мы завершили миграцию довольно большой системы с сотнями устаревших компонентов на UTF8.Спасибо за всю рыбу, Latin1, но будущее за UTF8, и эта миграция была обязательной.

Итак, все работает отлично, кроме поиска LIKE на MySQL.Я искал другие вопросы здесь, но они все решают основные проблемы миграции latin1 -> utf8, но не поиска, REGEX и LIKE ....

Например, я пытаюсь

SELECT *ИЗ ГОРОДОВ, ГДЕ ИМЯ НРАВИТСЯ '% SAO PAULO%'

и получите ноль результатов

ВЫБЕРИТЕ * ИЗ ГОРОДОВ, ГДЕ ИМЯ НРАВИТСЯ '% SÃO PAULO%'

и получите ожидаемый результатрезультаты (обратите внимание на тильду A).

При использовании latin1 сортировка по умолчанию latin1_swedish делает ожидаемую вещь, рассматривая A как Ã, а C как Ç.Но ни с одним из сопоставлений UTF8 это не работает.

Что мне делать?Любая помощь будет оценена.Спасибо всем, и я надеюсь внести свой вклад в это сообщество так же, как и в мою собственную работу.

Ответы [ 2 ]

1 голос
/ 29 февраля 2012

Я рискну догадаться и скажу, что вы используете utf8_bin. Вам нужно использовать utf8_unicode_ci, чтобы получить правильные сравнения, которые вы пытаетесь сделать. Это немного медленнее, но правильнее.

0 голосов
/ 29 февраля 2012

возможно, вы можете использовать функцию CONVERT для преобразования вашего LATIN1 в UTF8: http://dev.mysql.com/doc/refman/5.0/en/charset-convert.html

Также, возможно, что-то не так с преобразованием, следующая ссылка выглядит как хорошее руководство для преобразования БД вUTF8 с некоторыми основными * командами NIX: http://en.gentoo -wiki.com / wiki / Convert_latin1_to_UTF-8_in_MySQL

Надеюсь, что это имело смысл.Удачи!

...