В чем разница между utf8 и utf8mb4?
Оптимизация кодировки символов MySQL на AlexHost: utf8 против utf8mb4
Почему стоит выбрать правильную кодировку на AlexHost? Кодировки MySQL utf8 и utf8mb4 определяют способ хранения и отображения данных – текста, эмодзи или многоязычных символов. Выбор неправильной кодировки может привести к поломке вашего сайта или приложения WordPress, особенно в случае с эмодзи или редкими символами. Высокопроизводительные VPS и выделенные серверы AlexHost с NVMe-накопителями и root-доступом позволяют легко настроить и перейти на utf8mb4 для современных, глобальных приложений. В этом руководстве сравниваются utf8 и utf8mb4, объясняется, почему utf8mb4 – лучший вариант, и показано, как настроить его на AlexHost.
Что такое utf8 в MySQL?
В MySQL набор символов utf8 исторически использовался для хранения данных Unicode. Предполагалось, что он будет поддерживать все символы Юникода, что делает его подходящим для большинства текстовых данных, включая многие языки и специальные символы. Однако реализация utf8 в MySQL поддерживает только подмножество полного стандарта UTF-8
Сколько байт использует utf8?
Набор символов utf8 в MySQL кодирует символы, используя от 1 до 3 байт на символ. Это означает, что он не может представлять символы, требующие 4 байта, такие как некоторые emojis и некоторые менее распространенные китайские, японские и корейские (CJK) символы. Если вы попытаетесь сохранить такие 4-байтовые символы в столбце utf8, MySQL вернет ошибку, что приведет к сбоям при вставке данных.Пример неподдерживаемых символов в utf8
- Эмодзи, такие как 😊, 🚀 и ❤️.
- Некоторые редкие символы CJK.
- Математические символы и другие специализированные символы Unicode.
Это ограничение привело к внедрению utf8mb4 в MySQL
Что такое utf8mb4 в MySQL?
Набор символов utf8mb4 в MySQL является истинной реализацией полного стандарта UTF-8. Он поддерживает от 1 до 4 байт на символ, что позволяет использовать весь набор символов Unicode. Сюда входят все символы, которые поддерживает utf8, а также дополнительные 4-байтовые символы, которые utf8 не поддерживает
Почему был введен utf8mb4?
MySQL представила utf8mb4, чтобы устранить недостатки utf8. С помощью utf8mb4 вы можете хранить любые допустимые символы Unicode, включая эмодзи, музыкальные ноты, математические символы и весь набор символов CJK. Это делает utf8mb4 предпочтительным набором символов для современных приложений, которым требуется поддержка широкого спектра текстовых данных
Основные различия между utf8 и utf8mb4
Характеристика | utf8 | utf8mb4 |
Байт на символ | 1-3 | 1-4 |
Охват Юникода | Частичный (исключает 4-байтовые символы) | Полный (поддерживает весь Юникод) |
Поддержка эмодзи | Нет | Да |
Символы CJK | Большинство, но не все | Все |
Совместимость | Устаревшие базы данных | Рекомендуется для новых проектов |
1. Длина байта
Наиболее существенное различие между utf8 и utf8mb4 заключается в количестве байтов, используемых для хранения символов. utf8 поддерживает до 3 байтов, а utf8mb4 – до 4 байтов. В результате utf8mb4 может хранить более широкий диапазон символов Юникода
2. Эмодзи и специальные символы
Если вам нужно хранить эмодзи или любые специальные символы, требующие 4 байта, utf8mb4 – единственный приемлемый вариант. В utf8 попытка сохранить 4-байтовый символ приведет к ошибке, что может привести к потере данных или сбоям в работе приложений
3. Совместимость с базами данных
utf8 был набором символов по умолчанию для многих старых инсталляций MySQL, что делает его совместимым с устаревшими системами. Однако для новых проектов и приложений, которые должны поддерживать глобальную аудиторию с различными наборами символов, теперь рекомендуется использовать utf8mb4
Почему стоит использовать utf8mb4 вместо utf8?
Учитывая ограничения utf8, использование utf8mb4 в целом является лучшим выбором для современных приложений. Вот несколько причин предпочесть utf8mb4
- Полная поддержка Юникода: utf8mb4 позволяет хранить все символы Юникода, включая emojis, которые становятся все более распространенными в пользовательском контенте.
- Перспективность: По мере добавления новых символов в стандарт Unicode, utf8mb4 гарантирует, что ваша база данных сможет их обрабатывать.
- Глобальная совместимость: С utf8mb4 вам не нужно беспокоиться о совместимости наборов символов для разных языков и специальных символов.
Когда все же следует использовать utf8?
Есть несколько сценариев, в которых utf8 все же стоит использовать
- Место для хранения данных: Поскольку utf8mb4 использует до 4 байт на символ, это может привести к несколько большему размеру базы данных по сравнению с utf8. Однако для большинства приложений эта разница зачастую незначительна.
- Унаследованные системы: Если у вас есть существующее приложение или база данных, использующая utf8, и вам не нужно хранить 4-байтовые символы, переход может не понадобиться.
Как преобразовать базу данных с utf8 на utf8mb4
Если вы решили перевести существующую базу данных MySQL с utf8 на utf8mb4, это включает в себя несколько шагов для обеспечения плавного перехода. Ниже приведено общее руководство по переводу базы данных на utf8mb4
Шаг 1: Резервное копирование базы данных
Прежде чем вносить какие-либо изменения, всегда создавайте резервную копию базы данных, чтобы предотвратить потерю данных
mysqldump -u username -p database_name > database_backup.sql
Шаг 2: Изменение набора символов и разделения
Выполните следующие SQL-команды, чтобы изменить набор символов и колляцию вашей базы данных, таблиц и столбцов на utf8mb4
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
Для каждой таблицы выполните
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Это изменит набор символов и кодировку для указанной таблицы и ее столбцов
Шаг 3: Обновление файла конфигурации
Чтобы новые таблицы и столбцы по умолчанию использовали utf8mb4, обновите конфигурационный файл MySQL (my.cnf или my.ini) со следующими настройками
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
Перезапустите MySQL, чтобы применить изменения
sudo service mysql restart
Шаг 4: Проверьте изменения
Проверьте, что набор символов был успешно обновлен
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
На выходе должно отобразиться utf8mb4 в качестве набора символов для вашей базы данных