Сопоставление базы данных
Оригинальное название: 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, таблицы стоит привести к одному виду. Делают это после резервной копии: конвертация кодировки при неверных исходных данных может превратить текст в «кракозябры».

