Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 27972|Răspunde: 0

[Sursă] Diferența dintre utf8 și utf8mb4 în MySQL

[Copiază linkul]
Postat la 2021-4-21 18:01:22 | | | |
Set de caractere necunoscut: utf8mb4
https://www.itsvse.com/thread-3199-1-1.html
1. Introducere

MySQL a adăugat această codificare utf8mb4 după 5.5.3, ceea ce înseamnă majoritatea octeților 4, și este folosit special pentru a fi compatibil cu unicode de patru octeți. Din fericire, utf8mb4 este un superset al utf8 și nu este necesară nicio altă conversie decât schimbarea codării în utf8mb4. Desigur, pentru a economisi spațiu, în general este suficient să folosești utf8.

2. Descrierea conținutului

După cum am menționat mai sus, deoarece utf8 poate salva majoritatea caracterelor chinezești, de ce să folosești utf8mb4? Lungimea maximă a caracterului UTF8 suportată de MySQL este de 3 octeți, iar dacă întâlnești un caracter larg de 4 octeți, vei introduce o excepție. Caracterul Unicode maxim codificat de UTF-8 de trei octeți este 0xffff, care este planul multilingv de bază (BMP) în Unicode. Adică, orice caracter Unicode care nu se află în planul multitext de bază nu poate fi stocat folosind setul de caractere utf8 al Mysql. Acestea includ emoji-uri (Emoji este o codificare Unicode specială întâlnită frecvent pe telefoanele iOS și Android) și multe caractere chinezești folosite rar, precum și orice caractere Unicode noi și altele.

3. Cauza principală a problemei

Formatul original UTF-8 folosea între unu și șase octeți și putea codifica până la 31 de caractere. Cea mai recentă specificație UTF-8 folosește doar unu până la patru octeți și poate codifica până la 21 de biți, ceea ce reprezintă exact toate cele 17 planuri Unicode. UTF8 este un set de caractere în MySQL care suportă doar caractere UTF-8 de până la trei octeți, care reprezintă planul multitext de bază în Unicode.

De ce UTF8 în Mysql suportă doar caractere UTF-8 cu maximum trei octeți? M-am gândit la asta, poate pentru că atunci când Mysql a fost dezvoltat prima dată, Unicode nu avea un plan auxiliar. La acea vreme, Comitetul Unicode încă visa la "65.535 de caractere sunt suficiente pentru întreaga lume". Lungimile șirurilor din Mysql numără caractere, nu octeți, iar pentru tipurile de date CHAR, șirurile trebuie să fie suficient de lungi. Când se folosește setul de caractere utf8, lungimea care trebuie păstrată este cea mai lungă lungime a caracterului utf8 înmulțită cu lungimea șirului, așa că este firesc să se limiteze lungimea maximă utf8 la 3, de exemplu, Mysql CHAR(100) va păstra 300 de octeți. Cât despre motivul pentru care versiunile ulterioare nu suportă caractere UTF-8 de 4 octeți, cred că unul este din motive de compatibilitate înapoi, iar celălalt este că caracterele din afara planului multilingv de bază sunt rar folosite.

Pentru a salva caractere UTF-8 de 4 octeți în Mysql, setul de caractere utf8mb4 este necesar, dar este suportat abia după versiunea 5.5.3 (vezi versiunea: select version(); )。 Cred că pentru o compatibilitate mai bună, ar trebui să folosești întotdeauna utf8mb4 în loc de utf8.  Pentru date de tip CHAR, utf8mb4 consumă mai mult spațiu, iar conform recomandării oficiale Mysql, folosește VARCHAR în loc de CHAR.







Precedent:Utilizare simplă a cadrului ORM SqlSugar
Următor:Antetul cererii HTTP Expect este explicat în detaliu
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com