Индекс - это упорядоченный список указателей на строки таблицы. Порядок основан на значениях CHARACTER SET
и COLLATION
столбца (-ов) индекса. Если вы измените либо, индекс должен быть перестроен. «Указатель» (в данном контексте) является копией PRIMARY KEY
.
. Вы должны сделать один или другой из
ALTER TABLE tbl CONVERT TO CHARACTER SET utf8mb4 COLLATE ...,;
, который преобразует все текстовые столбцы в таблице , Или, если вам нужно оставить некоторые с их текущим набором символов / сопоставлением, измените каждый столбец:
ALTER TABLE tbl MODIFY col_name ... CHARACTER SET utf8mb4 COLLATE ...;
, где первый '...' - это остаток определения столбца (VARCHAR, NOT NULL, что угодно).
Все индексы, которые включают изменяемые столбцы, будут перестроены. В частности, обратите внимание, что VARCHAR
PRIMARY KEY
фактически присутствует в каждом вторичном индексе.
Сортировка utf8mb4_unicode_ci
довольно старая; вы можете предпочесть utf8mb4_unicode_520_ci
, особенно потому, что он обрабатывает эмодзи как отдельные, а не смешанные вместе (IIR C).
Тот факт, что utf8 является подмножеством utf8mb4, не имеет значения; MySQL видит это как изменение и не предпринимает никаких коротких путей.