MySQL · MySQL 8.4.6
GitHub переводил 1200 с лишним хостов MySQL на 8.0 больше года. Одна из проблем — коллация: в 8.0 по умолчанию utf8mb4_0900_ai_ci, она не различает ни регистр, ни диакритику.
В таблице users логины хранятся с коллацией utf8mb4_bin, уникальный индекс стоит на login. Перед переездом колонки на utf8mb4_0900_ai_ci нужно найти группы логинов, которые станут одинаковыми: variants — логины группы через запятую в порядке utf8mb4_bin, cnt — сколько их. Группы из одного логина не нужны.
В работе: Миграция схемы: до смены коллации уникальный индекс нужно почистить, иначе ALTER упадёт на дублях.
Источник: кейс GitHub: переход github.com на MySQL 8.0, 2023. Условие пересказано своими словами.
Какие запросы вернут группы логинов, которые совпадут после перехода на utf8mb4_0900_ai_ci?
- GROUP BY LOWER(login)
- GROUP BY по login COLLATE utf8mb4_0900_ai_ci
- GROUP BY login COLLATE utf8mb4_0900_as_ci
- Окно COUNT(*) OVER с той же коллацией в PARTITION BY
- GROUP BY login