Полный цикл в digital

Кодировка и представление

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

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

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

  • Юникод
  • ASCII
  • EBCDIC

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

Символьная кодировка может быть задана для:

  1. Сервера
  2. Базы данных
  3. Таблицы
  4. Колонок в таблице

Все параметры могут быть переданы серверу тремя разными способами:

  1. Через командную строку mysqld
  2. Через конфигурационный файл my.cnf my.ini
  3. Через опции компиляции

Кодировка character set и представление collation сервера

Кодировка characher set это набор используемых символов, на картинки это utf8.

Представление collation набор правил для сравнения символов в наборе, на картинки это utf8_general_ci.

Тут есть несколько фундаментальных вещей которые надо понимать. Основные параметры используемые в контексте сервера:

  • character_set_server
  • collation_server

Оба параметра влияют на определение кодировки и отображения сервера MySQL. Можно задать оба параметра либо только один из них. При этом важно знать как задача того или иного влияет на определение отсутствующего:

  • Не заданы используются значения по умолчанию (дефолтные)
  • Заданы оба используются указанные кодировка и ее представление
  • Задана только кодировка представление выставляется по умолчанию для данного типа кодировки. Для каждого типа кодировки есть ее дефолтное представление, например, дефолтная кодировка сервера latin1, дефолтное отображение для нее latin1_swedish_ci

Кодировка (character set) и представление (collation) сервера

Посмотреть соответствие кодировки и ее дефолтного представления можно используя команду:

mysql>SHOW COLLATION LIKE 'имя_набора_характеристик';
mysql>SHOW COLLATION LIKE 'latin1%';
mysql> +-------------------+---------+----+---------+----------+---------+
 | Collation         | Charset | Id | Default | Compiled | Sortlen |
 +-------------------+---------+----+---------+----------+---------+
 | latin1_german1_ci | latin1  |  5 |         | Yes      |       1 |
 | latin1_swedish_ci | latin1  |  8 | Yes     | Yes      |       1 |
 | latin1_danish_ci  | latin1  | 15 |         | Yes      |       1 |
 | latin1_german2_ci | latin1  | 31 |         | Yes      |       2 |
 | latin1_bin        | latin1  | 47 |         | Yes      |       1 |
 | latin1_general_ci | latin1  | 48 |         | Yes      |       1 |
 | latin1_general_cs | latin1  | 49 |         | Yes      |       1 |
 | latin1_spanish_ci | latin1  | 94 |         | Yes      |       1 |
 +-------------------+---------+----+---------+----------+---------+

Поле Default дает ответ о представлении выбранной кодировки.

Наши команды для установки кодировки:

my.cnf (my.ini)[mysqld]
character-set-server = utf8
collation-server = utf8_unicode_ci

Кодировка (character set) и представление (collation) базы данных

Тут есть два варианта определения кодировки и представления.

Явно при выполнении запроса на создание базы данных:

mysql>CREATE DATABASE db_name CHARACTER SET latin1 COLLATE latin1_swedish_ci;

Неявно через переменные character_set_database и collation_database. Однако, эти переменные нельзя задать явно ни в командной строке ни в конфигурационном файле.

Кодировка (character set) и представление (collation) таблиц

Тут все довольно просто. Задать кодировку и ее представление можно через команды:

mysql>CREATE TABLE t1 ( … )
mysql>CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Тут главное иметь в виду, что если эти настройки не заданы, то берутся настройки базы данных.

Кодировка (character set) и представление (collation) колонок в таблице

Если параметры кодировок не указаны, берутся те, что указывались для таблицы.

Кодировка клиент-серверного соединения

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

  • character_set_client кодировка в которой посылается запрос от клиента
  • character_set_connection кодировка используемая для конвертации пришедшего запроса statement'а
  • character_set_results кодировку, в которую сервер должен перевести результат перед его отправкой клиенту
  • colation_connection представление кодировки соединения

Озадачиваться проблемой инициализации всех этих переменных не стоит (хотя в нашем случае присвоить им значения необходимо).

Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг