====== Неправильные поиск/сортировка русского текста ======
Данный способ решения применим для **MySQL 3.23.xx** и **4.0.xx**. В поздних версиях 4.1 кодировка базы данных задается при ее создании в конструкции CREATE TABLE или меняется позже запросом ALTER TABLE.
Данная инструкция будет полезна прежде всего людям, имеющим доступ к файлу конфигурации MySQL сервера и shell. Однако и владельцы shared-hosting аккаунтов могут подробно описать администрации хостинга, что им следует делать, что бы решить проблему.
===== Как убедиться, что сервер настроен не верно? =====
Выполняем в утилите mysql (shell) запрос
SHOW VARIABLES LIKE 'character_set';
Получаем такой результат:
+---------------+--------+
| Variable_name | Value |
+---------------+--------+
| character_set | latin1 |
+---------------+--------+
1 row in set (0.00 sec)
Проведя данную операцию, мы определили что кодировка, которую использует сервер, latin1. В базе данных наши тексты хранятся в другой кодировке (скорее всего, они в кодировке windows-1251, koi8-ru). Соответсвенно это и вызывает проблем при поиске данных в текстах, так как сервер считает, что все тексты в кодировке latin1.
===== Исправление =====
Нам необходимо выяснить какие кодировки поддерживает сервер, для этого выполняем запрос:
SHOW VARIABLES LIKE 'character_sets';
Результатом будет что-то вроде
+----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| character_sets | latin1 big5 czech euc_kr gb2312 gbk latin1_de sjis tis620 ujis dec8 dos german1 hp8 koi8_ru latin2 swe7 usa7 cp1251 danish hebrew win1251 estonia hungarian koi8_ukr win1251ukr greek win1250 croat cp1257 latin5 |
+----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
Выбераем из результатов кодировку в которой хранятся наши данные и редактируем файл my.cnf (*nix - /etc/my.cnf; Windows - c:\my.cnf).
В секции [mysqld] указываем параметр default-character-set c выбранным значением.
Например:
[mysqld]
default-character-set = cp1251
Делаем рестарт MySQL. В некоторых случаях после этого необходимо переиндексировать таблицы (для этого нужно выполнить запрос REPAIR TABLE tbl_name QUICK; или использовать утилиту myisamchk).