В чем разница между кодировками utf8mb4 и utf8 в MySQL?

в чем разница между utf8mb4 и utf8 charsets в в MySQL?

Я уже знаю, о ASCII, UTF-8, UTF-16 и UTF-32 кодировки; но мне любопытно узнать, в чем разница utf8mb4 группа кодировок с другими типами кодировок, определенными в Сервер MySQL.

есть ли какие-либо специальные льготы/предлагает использовать utf8mb4 а не utf8?

3 ответов


UTF-8-кодировка переменной длины. В случае UTF-8 это означает, что для хранения одной кодовой точки требуется от одного до четырех байтов. Однако кодировка MySQL под названием "utf8" хранит только максимум три байта на кодовую точку.

таким образом, набор символов " utf8 "не может хранить все кодовые точки Юникода: он поддерживает только диапазон от 0x000 до 0xFFFF, который называется"Основной Многоязычный Самолет". См. также сравнение Unicode кодировки.

Это документация MySQL должен сказать об этом:

набор символов с именем utf8 использует максимум три байта на символ и содержит только символы BMP. Начиная с MySQL 5.5.3, набор символов utf8mb4 использует максимум четыре байта на символ, поддерживает дополнительные символы:

  • для символа BMP utf8 и utf8mb4 имеют идентичные характеристики хранения: тот же код значения, та же кодировка, та же длина.

  • для дополнительного символа,utf8 не может хранить символ вообще, в то время как utf8mb4 требует четыре байта для его хранения. Поскольку utf8 не может хранить символ вообще, у вас нет дополнительных символов в Столбцах utf8, и вам не нужно беспокоиться о преобразовании символов или потере данных при обновлении данных utf8 из более старых версий MySQL.

Итак, если вы хотите ваш столбец для поддержки хранения символов, лежащих вне BMP (и вы обычно хотите), таких как emoji используйте "utf8mb4". См. также каковы наиболее распространенные символы Unicode без BMP в фактическом использовании?.


на utf8mb4 набор символов полезен, потому что в настоящее время нам нужна поддержка для хранения не только языковых символов, но и символов, недавно введенных смайликов и так далее.

хорошее чтение на как поддерживать полный Unicode в базах данных MySQL Матиас Байненс также может пролить свет на это.


взято с MySQL 8.0 Справочное Руководство:

  • utf8mb4: A UTF-8 кодирование Unicode набор знаков с помощью один четыре байта на символ.

  • utf8mb3: A UTF-8 кодирование Unicode набор знаков с помощью один три байта на символ.

на в MySQL utf8 в настоящее время является псевдонимом для utf8mb3, который это depracted и будет удален в будущем в MySQL релиз. В этот момент utf8 станет ссылкой на utf8mb4.

таким образом, независимо от этого псевдонима, вы можете сознательно установить себе utf8mb4 кодировка.