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

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

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

Есть ли какие-то особые преимущества/предложения использования utf8mb4 а не utf8?

+257
06 мая '15 в 10:45
источник поделиться
3 ответа

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

Поэтому набор символов "utf8"/"utf8mb3" не может хранить все кодовые точки Unicode: он поддерживает только диапазон от 0x000 до 0xFFFF, который называется " Базовая многоязычная плоскость ". Смотрите также Сравнение кодировок Unicode.

Вот что (предыдущая версия той же страницы в) документации MySQL должно сказать об этом:

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

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

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

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

+303
06 мая '15 в 10:47
источник

Связанные вопросы


Похожие вопросы

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

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

+44
31 окт. '16 в 12:28
источник

Взято из справочного руководства по MySQL 8.0:

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

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

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

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

+17
14 сент. '18 в 18:25
источник

Посмотрите другие вопросы по меткам или Задайте вопрос