Войти или зарегистрироваться




MySQL и кодировка таблиц

 

Очень часто при переносе базы данных MySQL начинаются проблемы с кодировкой выводимой информации на сайте. Это может быть из-за различия в версиях программного обеспечения, операционных систем, на которых работает сервер или просто из-за различий в настройках.

 

Решения проблемы кодировов базы MySQL достаточно простое - достаточно просто установить на сайт скрипт PhpMyAdmin и вписать всего лишь несколько команд, которые нужно будет отправить MySQL. Разберём задачу более подробно, что бы каждый смог найти себе подходящий вариант и исправить проблемы.  Лично у меня был случай совсем недавно, что при переносе сайта про декор зеркал и стекла при переносе с локального компьютера в Интернет, на страницах всесто статей появились кубики и вопросики. Что делать, сам не знал, пока не прочитал несколько полезных статей. Совету оттуда решил собрать на одной странице. Пользуйтесь!

 

На FreeBSD

  • mysqldump -u -p --default-character-set=cp1251 dbname tablename > dump_table.sql

Следующий этап я делаю на сервере FreeBSD, т.к. глючный виндовый блокнот будет три часа 10 метров открывать. Альтернатива - UNIX редактор vi:

  • vi dump_table.sql

Для того, что бы загрузить файл с данными в нужной кодировке, необходимо вставить в самое начало файла несколько строк, которые как раз укажут MySQL, какую кодировку необходимо использовать:

  • SET NAMES cp1251;
  • SET CHARACTER SET cp1251;

Затем я скачал файл себе на компьютер, а здесь уже через mysql.exe импортировал его в свою локальную базу данных. Открываю в MySQL Query Browser, русский текст! Ура! Но это еще только начало… Удалил пару строк. Обратный экспорт в MySQL 4.0 не получился. Точнее получился, только китайский. MySQL Administrator с этим тоже не справился, хотя настройки все верны.

Пробуем следующую команду через консоль MySQL:

  • mysqldump -u -p dbname tablename > dump_table.sql

Должно помочь. Если же причина не исправлена, продуем другие варианты.

 

MySQL и русская кодировка WINDOWS-1251

Сегодня мы рассмотрим, что нужно написать в конфигурационном файле /etc/my.cnf для того, чтобы настроить mysql стандартной сборки на работу с кодировкой utf8 по умолчанию без всякой перекомпиляции.

Рассмотрим пример конфига на основе MySQL 5.x.

В раздел [mysqld] необходимо добавить следующее:

  • default-character-set=utf8
  • character-set-server=utf8
  • collation-server=utf8_general_ci
  • init-connect="SET NAMES utf8"
  • skip-character-set-client-handshake

Две последние строки принудительно устанавливают кодировку utf8 для всех запросов.

В раздел [mysqldump] достаточно добавить только

  • default-character-set=utf8

Этого достаточно, чтобы MySQL работал с windows-1251 кодировкой по умолчанию.


Если же при импорте базы данных вместо русских букв выдаются иероглифы или знаки вопроса, это значит, что дамп был сделан в кодировке, отличной от utf8. Переделайте дамп в utf8 или перекодируйте его в нужную кодировку с помощью утилит iconv или recode. У меня после данных действией сайт-магазин, где продаётся пленка для зеркал и стекла стал работать корректно.

 

Кодировка запросов MySQL

Итак, по умолчанию для всех обьектов базы устанавливается кодировка latin1, и если в поле с такой кодировкой запихнуть русские данные, то вместо символов Вы будете видеть знаки вопроса. Для избежания данной проблемы достаточно установить при создании базы нужную Вам кодировку:

  • CREATE DATABASE yourbase CHARACTER SET ‘cp1251′

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

  • ALTER TABLE students CHANGE name name varchar(100) CHARACTER SET ‘cp1251′

Типы полей надо оставить прежними, нужно только изменить кодировку(CHARACTER SET).

Для корректной работы с кодировками осталась одна вещь - после установления соединения необходимо указать требуемую кодировку с помощью запроса:

  • SET NAMES cp1251;

Кстати, полный список кодировок, которые поддерживает Ваш сервер, можно получить с помощью комманды

  • SHOW CHARACTER SET;

 

Кодировка UTF8

Для того, что бы создать базу данных MySQL, достаточно просто знать несколько особенностей работы в СУБД.

Далее нужно изменить кодировку для таблиц, создаваемых по умолчанию (если база не пуста, то кодировка существующих таблиц останется прежней). Это можно сделать SQL-запросом:

  • ALTER DATABASE `gb_rek_jabber` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Или через phpMyAdmin (ссылка и параметры для доступа есть на странице с паролями). В phpMyAdmin нужно в левой колонке выбрать Вашу базу данных (обычно представлено 2 базы - Ваша и information_schema - служебная), затем зайти на вкладку "Операции", внизу будет раздел "Сравнение" - поставьте там ту кодировку, которая Вам нужна (например utf8_unicode_ci) _ci на конце кодировки означает что в текстовых полях поиск и сравнение будут производиться без учета регистра, _cs - с учетом регистра, _bin - двоичное сравнение просто по кодам символов.

 

Книги и самоучители MySQL

Наконец, советую скачать и прочитать (ну или хотя бы оставить до лучших времён на компьютере) несколько самоучителей по MySQL и языку запросов в частности. Там и про кодировку в MySQL есть!

 

« Пред.
 
След. »


Самое популярное


Последние новости


Разделы форума

Все разделы форума

При перепечатке материалов ссылка на источник обязательна.

© Андрей Максимов, 2008-2011

Яндекс цитирования