Неправильные поиск/сортировка русского текста

Данный способ решения применим для 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).

 

sources/db/mysqlrus.txt · Последние изменения: 2007/08/14 12:01 (внешнее изменение)

Работает на DokuWiki
© 2002—2006 ibresource
e-mail: wikiteam@iblink.ru