RU 
Регистрация

хостинг: ValueHost 2.0
           

Помощь


Акции:

Бонус за друга!

Базы данных

Часто задаваемые вопросы по базам данных на серверах ValueHost:  
  • На сайте криво отображаются кодировки символов из базы данных. Что
    делать?

  • В: На сайте криво отображаются кодировки символов из базы данных. Что делать?

    О: Такая ситуация может сложиться при переносе сайта или восстановлении базы из бэкапа, иными словами при импорте/экспорте содержимого базы данных. Дело в том, что для корректной работы кодировок нужно правильно учесть кодировку, в которой работает сайт, кодировку, в которой установлено соединение с базой данных (mysql переменные character_set_client, character_set_results, character_set_connection), кодировку, в которой данные в базе хранятся, и кодировки, указанные при создании таблиц (charset/collation). В идеале это все должно совпадать.

    Если ошибки все-таки допущены, то исправить их можно так:

    - проверьте в phpmyadmin, чтобы данные отображались корректно. Если там тоже проблемы, попробуйте изменить значение "Сопоставление соединения с MySQL:" на первой странице phpmyadmin. Если получится, то базу можно не перезаливать.

    - найдите в скриптах сайта, где использована функция mysql_connect(). Сделать это можно по ssh командой grep -Rl mysql_connect ./

    - откройте найденный скрипт и после функции mysql_connect() добавьте mysql_query ('SET NAMES UTF8;'); (вместо UTF8 можно подставить ту кодировку, в которой у Вас хранятся данные). Проверьте так же, не использована ли уже где-то функция SET NAMES с неверными параметрами.

    Как правило, этих мер хватает. Если функция mysql_connect использована в нескольких местах, соответственно SET NAMES надо прописать для каждой.

    В тяжелых случаях, особенно при миграции сайта с 4й версии mysql на 5ю:

    - Сделайте бэкап базы.

    - Откройте дамп базы и проверьте в какой кодировке там фактически хранятся данные. Если кодировка отличается от той, которая используется на сайте, перекодируйте дамп (это можно сделать по ssh командой iconv -f кодировка_дампа -t нужная_новая_кодировка файл_с_дампом.sql >
    новый_дамп.sql  Список доступных кодировок iconv --list).

    - В дампе проверьте все запросы вида CREATE TABLE - значения charset надо поправить на нужную кодировку. (иногда допустимо исправить весь файл ssh командой sed -i '' 's/utf8/cp1251/g/' имя_файла.sql - это заменит в указанном файле все упоминания utf8 на cp1251)

    - все запросы в дампе на установку переменных character_set_client, character_set_results, character_set_connection лучше закомментировать или удалить.

    - После этого залить дамп в базу и проверить работу сайта.

    Если данные не отображаются корректно уже в самом дампе базы при любой кодировке обзора этого дампа - дамп надо снимать заново.

    Более полно эта тема рассмотрена в статье
    http://www.lissyara.su/articles/freebsd/www/mysql_charsets/
    А так же в докуменации к mysql
    http://mysql.ru/docs/mysql-man-5.1-en/internationalization-localization.html#charset-mysql