2011-08-09

Установка последней версии MySQL 5.5.15 и проблемы с кодировкой MySQL на сайте на PHP

На установленном на сельском древнем компе Debian GNU/Linux 6.0.2.1 (Pentium III 733 MHz, RAM 512Mb) решил обновить версию MySQL с 5.1.x на 5.5.15, дабы продолжить на нем работу над небольшим сайтиком на PHP. Скачал пакет исходных текстов с сайта Oracle (с его зеркал), установил и настроил его по этой доке (не без проблем, желательно после установки и настройки полностью удалить каталоги старого MySQL). Единственное, что пришлось поменять, местоположение сокета на файловой системе в /etc/my.cnf:

вместо
socket = /var/lib/mysql/mysql.sock

надо записать
socket = /var/run/mysqld/mysqld.sock

в противном случае не будет работать ни одна программа или сайт, т.к. они ожидают найти сокет в определенном месте.
Теперь у меня дома и в селе была почти одинаковая версия MySQL, что исключало какие-либо проблемы при работе с ней.
Но не тут-то было. После открытия сайта выяснилось, что русские буквы показываются знаками вопроса. Поиск в инете выводил на 2 пути решения вопроса: настроить my.cnf или перед каждым запросом делать запрос:

$query="set names utf8";
$result = mysql_query($query) or die("Query failed");

Решение проблемы таким образом мне не улыбалось. Настройки же my.cnf приводили только к краху запуска MySQL. Так как в селе и других дел полно, забросил временно эти поиски, а сегодня решил еще раз поискать решение проблемы путем модификации my.cnf. Последовательно комментируя настройки, нашел рабочую кофигурацию, при которой сайт нормально отображает русские буквы. Обычно предлагается внести в MySQL в секцию [mysqld] следующие настройки:

[mysqld]
default-character-set=utf8
character-set-server=utf8
collation-server=utf8_general_ci
init-connect="SET NAMES utf8"
skip-character-set-client-handshake

Оказалось, что первая настройка и не дает запустить сервер MySQL, а эту настройку упорно описывают везде, где обсуждается эта тема. Возможно, она работает на Windows, т.к. обычно везде идет речь о кодировке WINDOWS-1251 (cp1251). Среди остальных тоже есть "лишние" (не исключено, что они еще понадобятся), а оставшаяся рабочая конфигурация выглядит так:

[mysqld]
character-set-server=utf8
skip-character-set-client-handshake

Теперь русские буквы показываются нормально.

2 комментария:

Unknown комментирует...

Все правильно, в других местах описывают либо 1251, либо есть лишние настройки, которые и у меня не давали нужный результат. Вписал ваши 2 строки в файл настройки - и вуаля. Все работает Мускул 5.5.

Unknown комментирует...

mao(tm)

Благодарю за статейку!!! Ищу уже треть дня, перерыл кучу (безполезных) сайтов и то, что нужно нашел только в Вашей статье. Спасибо! :)

По больше бы таких статей - понятных и по делу!..

УДАЧИ ВАМ! :)