Если у вас есть какие-либо индексы для столбцов, которые объявлены VARCHAR(255)
, вы можете получить ошибку об «индексе, превышающем 767 байт» при преобразовании в utf8mb4.Существует 5 обходных путей .
Если у вас нет индексированных символов от 191 до 255 символов, тогда
ALTER TABLE tbl CONVERT TO utf8mb4;
преобразует *1011* все столбцы в таблице tbl
в utf8mb4.
Если вы случайно неправильно сохранили байты utf8 в latin1 в "двойном кодировании", вам нужно другое исправление.Обзор Исправления для различных случаев .
Набор символов или сопоставление "по умолчанию" - это просто значение по умолчанию.То есть, когда создается новый столбец или таблица, он принимает по умолчанию .Если вы явно указываете набор символов и / или параметры сортировки для столбца, это переопределяет значение по умолчанию для таблицы.
Существует старое высказывание: «Если оно не сломано, не исправляйте его».Я склоняюсь к созданию новых баз данных / таблиц / столбцов utf8mb4, но оставляю старые в покое.Примечание: со смесью все в порядке. соединение указывает, какую кодировку использует клиент .MySQL в течение INSERT
или SELECT
будет конвертировать из / в настройки клиента в / из настроек столбца.
Испанский язык имеет ограниченный набор символов.Этот набор является подмножеством latin1, utf8 и utf8mb4, поэтому любая из этих кодировок работает с испанским языком.Однако кодировка отличается.Например, ñ
- это
Hex F1 in latin1
Hex C3B1 in utf8 and utf8mb4
Аналогично для остальной части Западной Европы.Азии нужно как минимум utf8.Для эмодзи и некоторых китайских иероглифов требуется utf8mb4.
Если у вас появятся вопросительные знаки, моджибаке и т. Д., Отладьте его здесь .
Терминология:Вне MySQL: UTF-8
;Внутри MySQL: utf8mb4
.Это по сути то же самое.MySQL utf8
является их подмножеством.
Tést¥
, в шестнадцатеричном виде:
54 E9 73 74 A5 -- cp1256, dec8, latin1, latin5 encoding
54 C3A9 73 74 C2A5 -- utf8, utf8mb4 encoding
54 C383 C2A9 73 74 C382 C2A5 -- "double encoded"; may show as Tést¥