Кодування бази даних MySQL – виводимо з запою пють бази

543

Від автора: ви навіщо повне відро баз на смітник несете викидати? Сервер китайський попався, і всі рядки ієрогліфами відображаються? Так кодування бази даних MySQL не та, напевно. Хто її закодирует, вона ж база? Зрозуміло! Ідіть, громадянин далі. Не звертаємо на нього уваги. Сьогодні ми познайомимося з кодуваннями в MySQL.

Навіщо кодувати БД?

Відразу хочу вас запевнити, що у нас ні однієї «п’є» бази немає. Тому дана кодування ніяк не пов’язана з надмірним вживанням «міцних» напоїв. Навпаки, всі БД кодуються для того, щоб користувачі (тобто ми з вами) могли прочитати міститься в них інформацію. Зрозуміло, що незрозуміло і без півлітра не розберешся? Кодування бази даних MySQL – виводимо з запою пють бази . Давайте обійдемося без цього крайнього засобу. Зараз все поясню!

Код MySQL, як і будь-яка інша інформація в обчислювальній техніці, задається за допомогою сполучення одиниці і нуля, які утворюють біти. Пригадуєте? Це ж основи інформатики, які всі ми проходили в школі.

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

Кодування бази даних MySQL – виводимо з запою пють бази

На даному етапі розвитку всесвітньої павутини найпоширенішими є 3 типи кодувань:

Юнікод.

ASCII.

EBCDIC.

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

Для нас найголовнішою кодуванням бази даних MySQL є UTF-8. Це означає, що в ній використовується 8-бітний Юнікод для представлення всіх символів. Завдяки широкій підтримці даної кодування в Мережі і на прикладному рівні ви можете бути впевнені, що записи в базі будуть збережені в читаному вигляді (без «абракадабр»).

Де її шукати?

Трохи пробіжимося по інтерфейсу phpMyAdmin. Зайшовши на першу сторінку програми, зверніть увагу на розділ «Загальні налаштування».

Кодування бази даних MySQL – виводимо з запою пють бази

Параметр «Зіставлення кодування з’єднання з MySQL» встановлює, з якою кодуванням повинен порівнюватися формат отриманих даних при підключенні до сервера СУБД. У цій програмній оболонці кодування можна задати вручну.

В «рідних» утилітах СУБД (mysqladmin, mysqlimport та інших) кодування таблиць MySQL береться з налаштувань операційної системи ПК. У разі їх відсутності встановлюється значення, задане за замовчуванням. Найчастіше, це кодування latin1.

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

Системні змінні та їх значення

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

Для ознайомлення з встановленими значеннями змінних системи СУБД в phpMyAdmin потрібно в останньому пункті верхнього меню «Ще» вибрати «Змінні».

Кодування бази даних MySQL – виводимо з запою пють бази

Після цього вам стануть доступні для перегляду і редагування системні змінні. Настійно рекомендую не міняти встановлених значень, якщо не знаєте «що почому». На усунення заподіяної шкоди може піти багато часу. Також це загрожує поганим настроєм, передчасною сивиною та проявом інших симптомів професійних хвороб сисадмінів Кодування бази даних MySQL – виводимо з запою пють бази .

Кодування бази даних MySQL – виводимо з запою пють бази

Також список всіх змінних (у тому числі і тих, які потрібні для налаштування кодування MySQL) можна отримати за допомогою команди show variables.

Кодування бази даних MySQL – виводимо з запою пють бази

Повернемося до отриманого списку змінних, і зупинимося на тих, які починаються з charset. Короткий опис тих, які можуть стати в нагоді:

character_set_client – вказана кодування, в якій будуть надходити дані з клієнтської сторони.

character_set_connection – встановлює кодування з’єднання.

character_set_database –набір символів, використовувані в БД за замовчуванням.

character_set_results – кодування, в якій сервер відправить дані клієнта.

character_set_server –використовувана за замовчуванням на сервері.

Ось тут перед описом наступної групи змінних, необхідних для того, як дізнатися кодування бази MySQL, слід попорпатися в теорії.

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

Наприклад, є кодування UTF-8. Існує величезна кількість вистав в рамках одного кодування. Не можна порівнювати дані, «поданих» в різних наборах символів. Це можна здійснювати тільки в рамках одного кодування. Останні 3 змінні як раз і показують встановлені подання.

Кодування бази даних MySQL – виводимо з запою пють бази

Дозволені порівняння для конкретної кодування на поточному екземплярі сервера, можна дізнатися за допомогою команди show collation. Наприклад:

show collation like ‘utf8%’;

Кодування бази даних MySQL – виводимо з запою пють бази

Ієрархія кодувань в СУБД

Кодування в MySQL, як і вся структура СУБД, мають певну ієрархію. Для кожного стовпця таблиці і бази можна встановити свій набір символів. Якщо він не заданий, то буде використовуватися кодування вищого в ієрархії елемента. Наприклад, якщо не встановлена кодування для таблиці, то для всіх її заптсей застосовується набір символів, заданий для БД.

Тепер трішки розімнемося і виконаємо запит, за допомогою якого отримаємо інформацію про кодування таблиці і всіх її стовпців. У прикладі я використовую таблицю БД world:

SHOW CREATE TABLE `city`;

Кодування бази даних MySQL – виводимо з запою пють бази

З прикладу видно, що кодування таблиці MySQL –latin1. Спробуємо її змінити за допомогою команди alter table:

alter table `city` charset “utf8”;

Тепер знову виконаємо SHOW CREATE, і подивимося, що вийшло:

Кодування бази даних MySQL – виводимо з запою пють бази

Як бачимо, кодування змінилася на utf8. Але нам цього мало! Ми, окрилені перемогою, поспішаємо розвинути свій успіх, і змінимо набір символів стовпця Name:

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

І знову перевіримо кодування MySQL:

Кодування бази даних MySQL – виводимо з запою пють бази

Вона змінилася на задану. Ну, на сьогодні вистачить! Ми з вами пройшли основи кодувань баз даних MySQL. Думаю, цього мінімуму цілком вистачить, щоб не вдаватися до допомоги «литротерапии». Та й взагалі ця «терапія» навряд чи посприяє розв’язанню будь-якої проблеми.