Полный цикл в 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%';

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

 +-------------------+---------+----+---------+----------+---------+
 | 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 |
 +-------------------+---------+----+---------+----------+---------+

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

Чтобы быстро определить кодировку вашей базы данных MySQL, выполните команду:

mysql>SHOW VARIABLES LIKE 'character_set_database';

Кодировку и представление можно указать в процессе создания базы данных:

mysql>CREATE DATABASE db_name CHARACTER SET latin1 COLLATE latin1_swedish_ci;

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

Чтобы быстро определить кодировку вашей таблицы MySQL, выполните команду:

mysql>SHOW TABLE STATUS WHERE Name = 'table_name';

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

mysql>CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Если эти настройки не заданы, то берутся настройки базы данных.

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

Чтобы быстро определить кодировку вашей колонки в таблице MySQL, выполните команду:

mysql>SHOW FULL COLUMNS FROM 'table_name' WHERE Field = 'column_name';

Если эти настройки не заданы, то берутся настройки для таблицы.

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

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

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

Получить массовый SQL запросы на изменение таблиц

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

mysql>SELECT CONCAT('ALTER TABLE `', t.`TABLE_SCHEMA`, '`.`', t.`TABLE_NAME`, '` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;') as sqlcode
FROM `information_schema`.`TABLES` t
WHERE 1 AND t.`TABLE_SCHEMA` = 'table_name'
ORDER BY 1;

Замените table_name на название вашей базы данных. Этот запрос сгенерирует список SQL-запросов ALTER TABLE, которые нужно выполнить для изменения кодировки и представлений всех таблиц.

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