Несколько раз при перезде на другой хостинг сталкивался с проблемой кодировки базы данных MySQL. Выглядит проблема следующим образом: заливаем сайт, настраиваем, затем восстанавливаем базу данных из дампа и вместо русских букв видим знаки вопроса или вообще непонятные символы. Связано это с тем, что многие хостеры не настраивают сервер для корректной работы с русской кодировкой. Особенно часто такая проблема встречается при переходе на VPS-тарифы, которые дают больше ресурсов, но предполагают и более высокий уровень знаний пользователей.
В большинстве случаев проблема возникает из-за того, что таблицы, которые использует база данных MySQL, созданы в кодировке latin1. Для того, чтобы проверить это, нужно зайти в PHPMyAdmin и прямо на первой странице посмотреть на “Сопоставление соединения с MySQL”.

Если там указано “latin1_swedish_ci” или что-то аналогичное, то русские буквы не будут отображаться.
Чтобы исправить эту проблему нужен доступ к конфигурационному файлу MySQL. Обычно на сервере он находится в директории “etc“:
/etc/my.cnf
Как я уже писал в статье про настройку Apache, желательно, чтобы на сервере был установлен Midnight Commander, любая навигация и изменения с его помощью намного удобнее и проще.
Итак, используя MC или другим доступным способом находим нужный файл и добавляем следующие строки в секцию “[mysqld]“:
default-character-set=cp1251
character-set-server=cp1251
collation-server=cp1251_general_ci
init-connect=”SET NAMES cp1251″
skip-character-set-client-handshake
Файл, после изменений сохраняем. Теперь нужно перезапустить весь сервер или непосредственно сервер БД MySQL при помощи следующей комманды:
service mysqld restart
Чтобы проверить кодировку необходимо с главного экрана PHPMyAdmin перейти в раздел “Базы данных“, в нижней строке столбца “Сравнение” должно быть значение “cp1251_general_ci“. Так же кодировку можно проверить SQL-запросом:
SHOW VARIABLES LIKE ‘ch%’;
После приведенных выше изменений, русские буквы должны отображаться нормально, если этого не происходит, то возможно проблема кроется уже в настройках php или браузера.
Поделиться в соц.сетях
Похожие записи
Мне нравится! | ||
| Нравится | ||









10 comments
adw0rd says:
Фев 24, 2010
Пора бы уже на utf8 переходить…
xela says:
Фев 25, 2010
Кое-где еще осталось. Глядишь и поможет кому-нибудь.
Олег says:
Апр 15, 2010
my.cnf настроен как показано в статье, а в phpMyAdmin все равно пишет: MySQL charset: UTF-8 Unicode (utf8)
при заполнении базы из под веб-интерфейса русскими символами получается крякозябра…
Please Help Me!
KrutoPAPA says:
Сен 27, 2010
боремся со знаками вопросами (на некоторых хостингах)
в php скрипт добавить строчки после mysql_select_db:
mysql_query (“set character_set_client=’cp1251′”);
mysql_query (“set character_set_results=’cp1251′”);
mysql_query (“set collation_connection=’cp1251_general_ci’”);
Николай says:
Янв 12, 2011
сделал как вы писали. добавил эти строки в конфиг. кодировка теперь нормально, а вот в пхпадмин теперь не пускает. Пишет вот такое зло:
Ошибка
SQL-запрос: Изменить
SET CHARACTER SET ‘utf8′;
Ответ MySQL: Документация
#2006 – MySQL server has gone away
xela says:
Янв 12, 2011
Николай, видимо у вас настройки какие-то изначальные были другими. У меня все прошло без проблем, а после обновления программного обеспечения на сервере, в этой процедуре уже и смысла нет.
Николай says:
Янв 12, 2011
Всё заработало.. Долго ковырялся, а оказалось просто что копируя код с вашего сайта кавычки оказались разные и кривые.
Спасибо!
Crusader says:
Июнь 29, 2011
myPhpAdmin на такой запрос выдал ошибку
UPDATE `users`.`news` SET `textnews` = ‘Много текста’ WHERE `news`.`newsid` =2
Ответ MySQL: Документация
#1366 – Incorrect string value: ‘\xD0\x9C\xD0\xBD\xD0\xBE…’ for column ‘textnews’ at row 1
хотя через сам Mysql UPDATE проходит, сделал как написано в статье – все поменялось наоборот, через терминал выдает эту ошибку, а через myPhpAdmin нормально
xela says:
Июнь 30, 2011
Уже давно как-то забросил эту тему, поэтому вряд ли помогу.
энергетик says:
Окт 11, 2011
спасибо! наконец то нашел ответ)))