Наверное, каждому вебмастеру знакома ситуация, когда после переезда, переустановки ПО на сервере, либо по какой-то другой причине, на сайте появляются кракозябры, вопросики и т.д. В данной статье показано как можно исправить эту проблему. Так же имейте ввиду, что не всегда можно восстановить исходные данные, но об этом немного позже.

И так, что мы имеем? А имеем мы следующее: дамп БД и движок (форум, магазин, каталог, CMS и т.д), на котором "почему-то" все отображается не так, как бы нам хотелось.
Первое, что мы сделаем, это проверим отображение кириллицы в дампе, чтобы разобраться, как поступить дальше.
Примечание: если вместо "кракозябров" Вы наблюдаете знаки вопроса, то проблема заключается в некорректной настройке скрипта/mysql-сервера для работы с Вашей БД. В данном случае можно сразу перейти к пункту 2.1

1.1 Открываем дамп Вашей БД текстовым редактором.

Дополнение: рекомендуется использовать EmEditor. Это довольно мощный текстовый редактор, который позволяет автоматически определять кодировку(и) текста в файле.

1.2 Ищем кириллический текст.

Дополнение: быстрее всего будет найти его в таблице сообщений, что мы и сделаем. Нажимаем Ctrl + F, вводим "`post`" (вместо post вы должно ввести имя своей таблицы с сообщениями, либо другой таблицы, где хранится кириллица, без двойных кавычек) и нажимаем Enter.

1.3 Если текст читаем и отображается корректно, тогда переходим к пункту 2.1, в противном случае продолжаем с пункта 1.4.

1.4 Нажимаем File - Reload - Detect All.

Дополнение: редактор выдаст список кодировок. Если их несколько, значит разные участки дампа сохранены в различных кодировках. Перебирайте их по очереди, пока не добьетесь корректного отображения. Если кириллица так и не отобразилась, тогда попробуйте сверить строку с Вашими кракозябрами вот с этой табличкой, далее сохраняете файл дампа в кодировке со второй колонки и выполните File - Reload - Кодировка с первой колонки. Если и здесь все безрезультатно, то, по всей видимости, кириллический текст был перекодирован несколько раз и восстановить его уже невозможно. Последней надеждой может оказаться этот сервис, который поддерживает все основные кодировки, а также умеет работать в автоматическом режиме.

Дополнение № 2: возможна ситуация, когда в дампе присутствуют "кракозябры" нескольких видов, либо содержится как текст, так и "кракозябры" - это означает, что данные в Вашей БД хранятся в различных кодировках. В этом случае обрабатывать дамп нужно по частям, но это уже тема для отдельной статьи.

1.5 Мы добились корректного отображения кириллического текста в дампе, теперь можно попытаться его импортировать и подключить к движку, но я рекомендую перейти к пункту 2.1.

Вторым этапом будет настройка движка для работы в корректной кодировке. Я уже рассказывал об этом более подробно в предыдущей статье о кодировках, поэтому здесь мы опустим описания и пояснения, а сразу перейдем к технической части.

2.1. Снова открываем дамп БД и смотрим кодировку таблиц, структура и содержимое которых было записано в дамп.

Дополнение: Нажимаем Ctrl + F и вводим "CHARSET=" (без кавычек). Если значение charset отлично, от той кодировки, в которой вы сохранили дамп, тогда при импорте нужно использовать принудительное указание кодировки (читаем здесь).

2.2. Создаем БД в кодировке, которую мы только что узнали. Если кроме кодировки в дампе описано еще и сопоставление(сравнение) то запомните его.

2.3. Открываем файл инициализации соединения с БД (обычно это init.php, global.php, connect.php db.php и т.д) и делаем следующее:

Примечание: в vBulletin функция указания явной кодировки уже описана в includes/class_core.php, Вам необходимо только раскомментировать следующую строку в includes/config.php:

PHP код:
//$config['Mysqli']['charset'] = 'utf8'; 
и заменить utf8 на cp1251, если Ваш дамп в cp1251.

Для других движков сразу после db_connect добавляем:

PHP код:
mysql_query("SET NAMES 'X' COLLATE 'Y''"); 
где X - кодировка БД, Y - сопоставление. (если Вы не знаете сопоставления, тогда удалите из запроса "COLLATE 'Y'").

2.4. Восстанавливаем дамп БД.

Дополнение: при восстановлении БД рекомендуется пользоваться скриптом SypexDumper.

Автор статьи: OldEr