В большой системе на основе Mysql 5.5.57 Php 5.6.37
В настоящее время вся система работает в utf8, включая SET NAMES utf8 в начале каждого соединения с БД.
Мне нужно поддерживать смайлики в одной из таблиц, поэтому мне нужно переключиться на utf8mb4. Я не хочу переключать другие таблицы.
Мой вопрос — если я изменю на SET NAMES utf8mb4 для всех соединений (utf8 и utf8mb4) и переключу конкретную таблицу только на utf8mb4 (и только записываю данные mb4 в эту таблицу). Будет ли работать остальная часть системы, как раньше?
Может ли быть какая-либо проблема от работы с SET NAMES utf8mb4 в таблицах / данных / соединениях utf8?
Я думаю, что не должно быть никаких проблем с использованием SET NAMES utf8mb4
для всех соединений.
(utf8mb3
это синоним utf8
в MySQL; Я буду использовать первый для ясности.)
utf8mb3
это подмножество utf8mb4
так что ваш клиент байтов будет счастлив в любом случае (за исключением Emoji, который нуждается в utf8mb4). Когда байты попадают (или приходят) в столбец, который объявлен только, будет проверка, чтобы убедиться, что вы не храните эмодзи или определенные китайские иероглифы, но в остальном это проходит с минимальной суетой.
Я предлагаю
ALTER TABLE ... CONVERT TO utf8mb4
как «правильный» способ преобразовать таблицу. Тем не менее, он преобразует все varchar / текстовые столбцы. это может Будь плохим…
если ты JOIN
преобразованная таблица в не преобразованную таблицу, тогда вы будете пытаться сравнить строку utf8mb3 со строкой utf8mb4. MySQL поднимает руки и конвертирует все строки из одной в другую. Это не INDEX
будет полезно.
Итак … Обязательно, по крайней мере, будьте последовательны в любом столбцы которые участвуют в JOINs
,
Других решений пока нет …