Войти Регистрация
Data base

101. Логины, которые склеятся после смены коллации

Лёгкая

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 упадёт на дублях.

Как проверяем Движка MySQL в браузере пока нет, поэтому здесь не запрос, а выбор решения. Выберите все верные варианты (одна лишняя отметка допустима). После ответа — почему каждый вариант верный или нет. Ответ один на подход: после него показываем разбор.
строкиGROUP BYколлацияGROUP_CONCAT

Источник: кейс 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