Просто про кодування 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 використовується для:
- зберігання даних в певній кодуванні (задається - character_set_database)
- порівняння даних, що зберігаються в різний спосіб (collation) (collation_database)
- видачі користувачеві даних в необхідної йому кодуванні (character_set_results), а не тільки в збереженої.
- отримання від користувача дані в різних кодуваннях і конвертації в кодування БД. (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;
Навігація по публікаціям
Дякую за пізнавальну статтю ... обов'язково візьму її собі на замітку.