Я думаю, что не должно быть проблем с использованием SET NAMES utf8mb4
для всех соединений.
(utf8mb3
- это синоним utf8
в MySQL; я буду использовать первый для ясности.)
utf8mb3
- это подмножество utf8mb4
, поэтому байтов вашего клиента будут счастливы в любом случае (за исключением Emoji, которому требуется utf8mb4). Когда байты попадают (или приходят) в столбец, который объявлен только, будет проверка, чтобы убедиться, что вы не храните эмодзи или определенные китайские иероглифы, но в остальном это проходит с минимальной суетой.
Я предлагаю
ALTER TABLE ... CONVERT TO utf8mb4
как «правильный» способ преобразования таблицы. Однако он преобразует все столбцы varchar / text. Это может быть плохим ...
Если вы JOIN
преобразовали таблицу в не преобразованную таблицу, то вы будете пытаться сравнить строку utf8mb3 со строкой utf8mb4. MySQL поднимает руки и конвертирует все строки из одной в другую. Это не INDEX
будет полезно.
Итак ... Убедитесь, что вы, по крайней мере, согласны с любыми столбцами , которые участвуют в JOINs
.