MySQL и UTF8
- 30.08.2007 13:40
- Прямая ссылка »
Буду потихоньку приносить пользу людям.
Только что разобрался с кодировкой utf-8 в мускуле. Началось с того, что в php xml-парсер плющит формат передаваемых ему данных. Но то, как он будет плющить, можно задать — указать выходной формат. win-1251 там нет, из нормальных есть только utf-8. Ох и намучался я с ней! Была мысль тупо конвертить после парсера в win-1251, но подумал, что хотя для этого проекта можно и так, но в других всё равно нужно будет в utf писать, чтоб как у людей.
Для начала, при создании таблицы надо в её параметрах дописать
CHARACTER SET utf8
Строки я издревле храню как BLOB. Мне так спокойнее. Чтоб их сравнивать LIKE'ом индифферентно к регистру, надо в SELECT'е конвертить их в текст:
CAST(your_column AS CHAR)
Ну и, собсно, то, из-за чего весь сыр-бор. Русский текст тупо не сравнивается нормально. То есть, чувствительно к регистру сравнивает, а нечувствительно — нет. С английским текстом, при этом, всё чики-пики. Оказалось, проблема возникает не в самом мускуле, а при передаче в него запроса. Чтобы всё было хорошо, надо после подключения перед SELECT-запросами передать мускулу такой запрос:
SET NAMES 'utf8'
Тогда тупая машина понимает, что строки мы ей передаём уже в unicode, и будет дальше всё нормально обрабатывать.