На этой странице мы расскажем, как поступать при неправильном переходе на MySQL 4.1 и выше, в результате чего возникли следующие проблемы:
- Вместо русских символов отображаются вопросительные знаки
- В phpmyadmin русский текст отображается как "крокозябры" (латинские символы с умляутами и т.п.)
- Неправильно сортируются русские слова (кириллица)
- При восстановлении выдаётся ошибка типа "Duplicate entry '??????' for key 2"
В связи с тем, что в последнее время всё чаще стали задавать подобные вопросы, мы выпустили промежуточную версию скрипта Sypex Dumper Lite 1.0.8.
Основное его отличие от предыдущего, улучшенная работа с кодировками.
Добавлен автовыбор кодировки, путем установки для CHARSET значения "auto" (установлено по умолчанию). При этом скрипт автоматически выбирает кодировку соединения исходя из кодировки таблицы. Кроме того, добавилась возможность принудительного изменения кодировки таблиц, для этого в RESTORE_CHARSET нужно установить 'forced->имя_кодировки', к примеру 'forced->cp1251'. Это как раз для случаев, когда данные в cp1251, а у таблиц - latin1.
Для коррекции кодировки вашей БД нужно выполнить следующие действия:
Cохранить БД с помощью нового дампера 1.0.8 (предварительно установив в dumper.php следующие значения, CHARSET = 'auto', RESTORE_CHARSET = 'forced->cp1251'), желательно для подстраховки убедиться, что в дампе нормально сохранены русские символы, после чего восстановить таблицы этим же скриптом из только, что созданного дампа. Теперь у таблиц будет правильная кодировка, и phpmyadmin будет правильно показывать и сортировать русские символы.
Но ваши скрипты скорее всего будут показывать вопросительные знаки, так как в них не указывается кодировка соединения cp1251, а используется latin1. Для того чтобы это исправить, нужно во всех ваших php-файлах, где вызывается функция mysql_connect, обычно перед вызовом mysql_select_db добавить следующую строку:
mysql_query("/*!40101 SET NAMES 'cp1251' */") or die("Error: " . mysql_error());
В итоге ваши скрипты будут нормально работать как со старыми версиями MySQL, так и с новыми.
Кроме того рекомендуется в с помощью phpmyadmin (или другого MySQL клиента) изменить кодировку по умолчанию для вашей БД, чтобы новые таблицы создавались с правильной кодировкой. В pma для этого нужно выбрать БД, зайти в раздел "Операции" и в выпадающем меню "Сравнения" выбрать правильное (соответствующее вашим данным).