Сопоставление базы данных

Оригинальное название: database collation

Коротко

Набор правил, по которым база данных сравнивает и сортирует строки: учитывать ли регистр, акценты и порядок букв. Задаётся вместе с кодировкой таблиц.

Что такое «Сопоставление базы данных»

По-английски это называется collation. Кодировка отвечает за то, как символы хранятся в байтах, а сопоставление — за то, как их сравнивать. От него зависит, найдёт ли поиск «Москва» по запросу «москва», в каком порядке встанут фамилии при сортировке и сочтёт ли индекс UNIQUE две строки одинаковыми.

WordPress работает с кодировкой utf8mb4: в отличие от старой utf8 в MySQL, она хранит любые символы Unicode, включая эмодзи. Сопоставление обычно выбирается автоматически, но его можно жёстко задать константой DB_COLLATE в wp-config.php.

Как читать название

  • utf8mb4_unicode_ci — сравнение по правилам Unicode, ci означает нечувствительность к регистру;
  • utf8mb4_general_ci — упрощённый и более старый вариант, в редких случаях сортирует неточно;
  • utf8mb4_0900_ai_ci — сопоставление по умолчанию в MySQL 8, ai — без учёта акцентов;
  • _bin на конце — побайтовое сравнение с учётом регистра.

Типичная ошибка при переносе

Дамп, снятый на MySQL 8, при импорте в MariaDB падает с ошибкой Unknown collation: 'utf8mb4_0900_ai_ci': у MariaDB нет такого сопоставления. Решают заменой в дампе на поддерживаемое, например utf8mb4_unicode_ci. Другая частая ошибка — Illegal mix of collations: запрос сравнивает поля из таблиц с разными сопоставлениями. Она появляется, когда часть таблиц создал старый плагин, а часть — ядро на новом сервере.

Как проверить таблицы сайта

SELECT TABLE_NAME, TABLE_COLLATION
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'wordpress'
ORDER BY TABLE_COLLATION;

Если в списке смешаны latin1 и utf8mb4 или разные варианты utf8mb4, таблицы стоит привести к одному виду. Делают это после резервной копии: конвертация кодировки при неверных исходных данных может превратить текст в «кракозябры».

Обновлено:

Все термины раздела «WordPress»

Что будем искать? Например,Продвижение