Просто про кодування mysql

Про кодуваннях Mysql багато інформації написано, багато питань вже задано, але судячи по такій кількості нових питань і проблем ще багатьом не все зрозуміло.

Для початку пояснимо основні поняття взагалі:

Що таке кодування (character set):
Припустимо, у нас є символи «А», «Б», «а», «б». Ми дамо кожному символу певний код: «А» = 0, «Б» = 1, «а» = 2, «б» = 3.
Тобто «А» - символ, 0 - код.
Таким чином комбінація всіх символів і відповідних їм кодів називається кодуванням.

Наприклад, «А» в кодуванні cp1251 = xC0. а в UTF8 = xD090

Що таке порівняння (collation):
Припустимо нам потрібно порівняти символи «А», «Б».
У найпростішому випадку, нам потрібно взяти їх коди і порівняти самі коди. Тобто якщо: «А» = 0, «Б» = 1 і 0 <1 соответственно «А» <«Б». То, что мы сделали и называется сравнением (collation). Этот простейший метод сравнения, по кодам, называется бинарным (binary).

А що якщо нам необхідно вважати маленькі і великі літери рівнозначними ( «А» = «а»). І так порівняти слова складаються з символів? Для цього нам потрібно використовувати інший метод порівняння регістронезавісімий (case-insensitive).

Ось для чого нам потрібно вибирати в mysql потрібний collation.

Відносно кодувань в MySQL

MySQL використовується для:

  1. зберігання даних в певній кодуванні (задається - character_set_database)
  2. порівняння даних, що зберігаються в різний спосіб (collation) (collation_database)
  3. видачі користувачеві даних в необхідної йому кодуванні (character_set_results), а не тільки в збереженої.
  4. отримання від користувача дані в різних кодуваннях і конвертації в кодування БД. (Character_set_client)

Кожен з цих параметрів можна задавати на наступних етапах роботи з MySQL:

  • для всього mysql сервера
    (Параметри: character_set_server, collation_server),
  • для окремої БД
    (Параметри: character_set_database, collation_database),
  • для поточного з'єднання з БД
    (Параметри: character_set_client, character_set_connection, character_set_results
    Або запити:
),
  • для окремої таблиці
    (Запит при створенні таблиці:

    Таким чином помилки виникають:
    - коли дані зберігаються в одній, але вказано, що інша кодування;
    - невірно вказано метод порівняння - помилки в сортуванні;
    - ви намагаєтеся отримати дані в кодуванні за замовчуванням, а не тієї, якою вам потрібна.

    Розібравшись тепер з цією статтею у вас більше не виникне помилок з невірною кодуванням або сортуванням в MySQL.

    PS: Одного разу у мене виникли проблеми з сортуванням. Спочатку думав в бік кодування, потім виявилося, що дана помилка через параметра max_sort_length (кількість сортируемих символів) Запит: SELECT @@ max_sort_length;

    Навігація по публікаціям

    Дякую за пізнавальну статтю ... обов'язково візьму її собі на замітку.