На этой странице мы расскажем, как поступать при неправильном переходе на 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 для этого нужно выбрать БД, зайти в раздел "Операции" и в выпадающем меню "Сравнения" выбрать правильное (соответствующее вашим данным).
Установка кодировок и запросов в MySQL 4.1 и выше
Для тех кто не умеет работать с кодировками в MySQL 4.1 и выше, ознакомьтесь с инструкциями ниже:
Если при подключении к базе MySQL версии 4.1 или выше, у Вас вместо данных отображаются знаки "???", то нужно добавить после соединения с MySQL (@mysql_select_db.....) строчку "mysql_query("SET NAMES cp1251");"
Для пользователей использующий кодировку MySQL 4.1 и выше:
По умолчанию создается база в кодировке windows cp1251.
Но при этом и скрипты должны при запросе задавать кодировку win1251, для этого добавляется строчка в скрипт "mysql_query("SET NAMES cp1251");" после подключения с базой.
Или же Вы можете "намертво" установить русскую кодировку. Это можно сделать через phpMyAdmin:
1. Кликнуть по названию базы в левой колонке
2. Кликнуть в верхнем меню "Операции"
3. Ниже, в поле "Сравнение" выбрать кодировку "latin1_swedish_ci" и нажать кнопку "Пошел"
4. Далее, если Вы будете загружать SQL дамп через phpMyAdmin, то делайте это следующим образом:
- заходите в раздел "Import" (в phpMyAdmin)
- нажимаете кнопку "Обзор" и указываете путь до SQL файла
- далее, в пункте "Кодировка файла" выбираете "latin1", и нажимаете кнопку "Пошел"
p.s. Кодировка базы задается ДО заливки дампа данных в базу MySQL
Это нужно делать, если данные отображаются в виде "???". Если все нормально, значит Ваши скрипты адаптированы к работе с MySQL 4.1 или выше