Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 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, и се използва специално за съвместимост с четирибайтов unicode. За щастие, 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 нямаше спомагателен план. По това време Unicode комитетът все още мечтаеше за "65 535 знака са достатъчни за целия свят". Дължините на низовете в Mysql броят символи, а не байтове, а за CHAR типове данни низовете трябва да са достатъчно дълги. При използване на набора от знаци utf8, дължината, която трябва да се запази, е най-дългата дължина на знака на utf8, умножена по дължината на низа, затова е естествено максималната дължина на utf8 да се ограничи до 3, например CHAR(100) Mysql ще запази 300 байта. Що се отнася до това защо следващите версии не поддържат 4-байтови UTF-8 символи, мисля, че едната е поради обратна съвместимост, а другата е, че символи извън основната многоезична равнина рядко се използват.

За да се запазят 4-байтови UTF-8 символи в Mysql, е необходим наборът от знаци utf8mb4, но той се поддържа само след версия 5.5.3 (виж версия: select version(); )。 Мисля, че за по-добра съвместимост винаги трябва да използваш utf8mb4 вместо utf8.  За данни от типа CHAR, utf8mb4 заема повече място и според официалната препоръка на Mysql използвайте VARCHAR вместо CHAR.







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

Mail To:help@itsvse.com