Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 27972|Ответ: 0

[Источник] Разница между utf8 и utf8mb4 в MySQL

[Скопировать ссылку]
Опубликовано 21.04.2021 18:01:22 | | | |
Неизвестный набор символов: utf8mb4
https://www.itsvse.com/thread-3199-1-1.html
1. Введение

MySQL добавил это кодирование utf8mb4 после версии 5.5.3, то есть большинство байтов 4, и специально используется для совместимости с четырёхбайтовым юникодом. К счастью, utf8mb4 является надмножеством utf8, и не требуется никакой другой конверсии, кроме изменения кодировки на utf8mb4. Конечно, чтобы сэкономить место, обычно достаточно использовать utf8.

2. Описание содержания

Как уже упоминалось, поскольку utf8 может сохранять большинство китайских иероглифов, зачем использовать utf8mb4? Максимальная длина кодировки UTF8, поддерживаемая MySQL, составляет 3 байта, и если вы столкнётесь с широким символом в 4 байта, вы вставите исключение. Максимальный символ Unicode, закодированный UTF-8 из трёх байт, равен 0xffff, что является базовой многоязычной плоскостью (BMP) в Unicode. То есть любой символ Unicode, не входящий в базовую многотекстовую плоскость, не может быть сохранен с помощью набора символов utf8 Mysql. К ним относятся эмодзи (эмодзи — это специальное кодирование Unicode, часто встречающееся на телефонах iOS и Android), а также множество редко используемых китайских иероглифов, а также любых новых символов Unicode и многое другое.

3. Корень проблемы

Оригинальный формат UTF-8 использовал от одного до шести байт и мог кодировать до 31 символа. Последняя спецификация UTF-8 использует всего от одного до четырёх байт и может кодировать до 21 бита, что соответствует всем 17 плоскостям Unicode. utf8 — это набор символов в Mysql, который поддерживает только символы UTF-8 длиной до трёх байт, что является базовой многотекстовой плоскостью в Unicode.

Почему UTF8 в Mysql поддерживает только символы UTF-8 с максимум тремя байтами? Я думал об этом, возможно, потому что когда Mysql только разрабатывался, у Unicode не было вспомогательного плана. В то время Комитет Юникода всё ещё мечтал о «65 535 символах — это достаточно для всего мира». Длина строк в Mysql учитывает символы, а не байты, и для типов данных CHAR строки должны быть достаточно длинными. При использовании набора символов utf8 длина, которую нужно сохранять, — это самая длинная длина символа utf8, умноженная на длину строки, поэтому естественно ограничить максимальную длину utf8 3, например, CHAR(100) Mysql сохраняет 300 байт. Что касается того, почему последующие версии не поддерживают символы UTF-8 по 4 байтам, думаю, одна из причин обратной совместимости, а другая — что символы вне базовой многоязычной плоскости редко используются.

Для сохранения 4-байтовых символов UTF-8 в MySQL необходим набор символов utf8mb4, но он поддерживается только после версии 5.5.3 (см. версию: выбрать версию(); )。 Я считаю, что для лучшей совместимости всегда стоит использовать utf8mb4 вместо utf8.  Для данных типа CHAR utf8mb4 занимает больше места, и согласно официальной рекомендации Mysql, используйте VARCHAR вместо CHAR.







Предыдущий:Простое использование фреймворка ORM SqlSugar
Следующий:Заголовок HTTP-запроса Expect подробно объясняется
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com