Кодировка базы данных MySQL – выводим из запоя пьющие базы

Кодировка базы данных MySQL

От автора: вы зачем полное ведро баз на мусорку несете выбрасывать? Сервер китайский попался, и все строки иероглифами отображаются? Так кодировка базы данных MySQL не та, наверное. Кто ее закодирует, она же база? Понятно! Идите, гражданин дальше. Не обращаем на него внимания. Сегодня мы познакомимся с кодировками в MySQL.

Зачем кодировать БД?

Сразу хочу вас заверить, что у нас ни одной «пьющей» базы нет. Поэтому данная кодировка никак не связана с чрезмерным употреблением «горячительных» напитков. Наоборот, все БД кодируются для того, чтобы пользователи (то есть мы с вами) могли прочитать содержащуюся в них информацию. Понятно, что непонятно и без полулитра не разберешься? :) . Давайте обойдемся пока без этого крайнего средства. Сейчас все поясню!

Код MySQL, как и любая другая информация в вычислительной технике, задается с помощью сочетания единицы и нуля, которые образуют биты. Вспоминаете? Это ведь основы информатики, которые все мы проходили в школе.

В мире существует множество текстовых кодировок (сочетаний 0 и 1), но в современности все они более-менее стандартизированы. Хотя и сейчас можно наткнуться на «абракадабру», если неправильно задать кодировку.

На данном этапе развития всемирной паутины самыми распространенными являются 3 типа кодировок:

Юникод.

ASCII.

EBCDIC.

Мы не будет сильно «зарываться» в теоретическом ворохе. Для получения более детальной информации перейдите по расположенным выше ссылкам на соответствующие публикации в Википедии.

Для нас самой главной кодировкой базы данных MySQL является UTF-8. Это значит, что в ней используется 8-битный Юникод для представления всех символов. Благодаря широкой поддержке данной кодировки в Сети и на прикладном уровне вы можете быть уверены, что записи в базе будут сохранены в читаемом виде (без «абракадабр»).

Где ее искать?

Немного пробежимся по интерфейсу phpMyAdmin. Зайдя на первую страницы программы, обратите внимание на раздел «Общие настройки».

Параметр «Сопоставление кодировки соединения с MySQL» устанавливает, с какой кодировкой должен сравниваться формат полученных данных при подключении к серверу СУБД. В этой программной оболочке кодировку можно задать вручную.

В «родных» утилитах СУБД (mysqladmin, mysqlimport и других) кодировка таблиц MySQL берется из настроек операционной системы ПК. В случае их отсутствия устанавливается значение, заданное по умолчанию. Чаще всего, это кодировка latin1.

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

Системные переменные и их значения

Архитектура MySQL построена на основе «клиент-сервер». Системные переменные (точнее их значения) используются при установке соединения клиента и сервера для корректного отображения всех данных, их обработки и поддержания сетевого сеанса.

Для ознакомления с установленными значениями переменных системы СУБД в phpMyAdmin нужно в последнем пункте верхнего меню «Еще» выбрать «Переменные».

После этого вам станут доступны для просмотра и редактирования все системные переменные. Настоятельно рекомендую не менять установленных значений, если не знаете «что почем». На устранение причиненного вреда может уйти много времени. Также это чревато плохим настроением, преждевременной сединой и проявлением других симптомов профессиональных болезней сисадминов :) .

Также список всех переменных (в том числе и тех, которые нужны для настройки кодировка MySQL) можно получить с помощью команды show variables.

Вернемся к полученному списку переменных, и остановимся на тех, которые начинаются с charset. Краткое описание тех, которые могут пригодиться:

character_set_client – указана кодировка, в которой будут поступать данные с клиентской стороны.

character_set_connection – устанавливает кодировку соединения.

character_set_database –набор символов, используемы в БД по умолчанию.

character_set_results – кодировка, в которой сервер отправит данные клиенту.

character_set_server –используемая по умолчанию на сервере.

Вот тут перед описанием следующей группы переменных, необходимых для того, как узнать кодировку базы MySQL, следует покопаться в теории.

Под кодировкой мы подразумеваем набор символов, применяемых для определенной структуры данных (базы, таблицы, поля). Но есть еще такое понятие как «представление» (collation), которая соответствует конкретному языку и используется при сравнении и упорядочивания записей.

Например, есть кодировка UTF-8. Существует огромное количество представлений в рамках одной кодировки. Нельзя сравнивать данные, «представленных» в разных наборах символов. Это можно осуществлять только в рамках одной кодировки. Последние 3 переменные как раз и показывают установленные представления.

Разрешенные сравнения для конкретной кодировки на текущем экземпляре сервера, можно узнать с помощью команды show collation. Например:

show collation like 'utf8%';

Иерархия кодировок в СУБД

Кодировки в MySQL, как и вся структура СУБД, имеют определенную иерархию. Для каждого столбца, таблицы и базы можно установить свой набор символов. Если он не задан, то будет использоваться кодировка высшего в иерархии элемента. Например, если не установлена кодировка для таблицы, то для всех ее заптсей применяется набор символов, заданный для БД.

Теперь немного разомнемся и выполним запрос, с помощью которого получим информацию о кодировке таблицы и всех ее столбцов. В примере я использую таблицу из БД world:

SHOW CREATE TABLE  `city`;

Из примера видно, что кодировка таблицы MySQL –latin1. Попробуем ее изменить с помощью команды alter table:

alter table `city` charset "utf8";

Теперь снова выполним SHOW CREATE, и посмотрим, что получилось:

Как видим, кодировка изменилась на utf8. Но нам этого мало! Мы, окрыленные победой, спешим развить свой успех, и изменим набор символов столбца Name:

alter table `city` modify `Name` char(35) charset " cp1251";

И снова проверим кодировку MySQL:

Она изменилась на заданную. Ну, на сегодня хватит! Мы с вами прошли основы кодировок баз данных MySQL. Думаю, этого минимума вполне хватит, чтобы не прибегать к помощи «литротерапии». Да и вообще эта «терапия» едва ли поспособствует решению любой проблемы.

Хотите изучить MySQL?

Прямо сейчас посмотрите 24-х часовой курс по базе данных MySQL!

Смотреть курс

Метки:

Комментарии Вконтакте:

Комментарии Facebook:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не робот.

Spam Protection by WP-SpamFree