|
RU
|
Регистрация |
|
ПомощьАкции:
Бонус за друга!
|
Базы данных
В: На сайте криво отображаются кодировки символов из базы данных. Что делать? О: Такая ситуация может сложиться при переносе сайта или восстановлении базы из бэкапа, иными словами при импорте/экспорте содержимого базы данных. Дело в том, что для корректной работы кодировок нужно правильно учесть кодировку, в которой работает сайт, кодировку, в которой установлено соединение с базой данных (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 > - В дампе проверьте все запросы вида CREATE TABLE - значения charset надо поправить на нужную кодировку. (иногда допустимо исправить весь файл ssh командой sed -i '' 's/utf8/cp1251/g/' имя_файла.sql - это заменит в указанном файле все упоминания utf8 на cp1251) - все запросы в дампе на установку переменных character_set_client, character_set_results, character_set_connection лучше закомментировать или удалить. - После этого залить дамп в базу и проверить работу сайта. Если данные не отображаются корректно уже в самом дампе базы при любой кодировке обзора этого дампа - дамп надо снимать заново. Более полно эта тема рассмотрена в статье
|