Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 27972|Svare: 0

[Kilde] Forskjellen mellom utf8 og utf8mb4 i MySQL

[Kopier lenke]
Publisert 21.04.2021 kl. 18:01:22 | | | |
1. Introduksjon

MySQL la til denne utf8mb4-kodingen etter 5.5.3, som betyr de fleste bytes 4, og den brukes spesifikt for å være kompatibel med fire-byte unicode. Heldigvis er utf8mb4 en supermengde av utf8, og ingen annen konvertering er nødvendig enn å endre kodingen til utf8mb4. Selvfølgelig, for å spare plass, er det som regel nok å bruke utf8.

2. Innholdsbeskrivelse

Som nevnt ovenfor, siden utf8 kan lagre de fleste kinesiske tegn, hvorfor bruke utf8mb4? Maksimal tegnlengde for UTF8-koding støttet av MySQL er 3 byte, og hvis du møter et bredt tegn på 4 byte, vil du sette inn et unntak. Det maksimale Unicode-tegnet kodet av UTF-8 på tre byte er 0xffff, som er det grunnleggende flerspråklige planet (BMP) i Unicode. Det vil si at ethvert Unicode-tegn som ikke er i det grunnleggende multitekstplanet ikke kan lagres ved hjelp av Mysqls utf8-tegnsett. Disse inkluderer emojier (Emoji er en spesiell Unicode-koding som ofte finnes på iOS- og Android-telefoner), og mange uvanlig brukte kinesiske tegn, samt eventuelle nye Unicode-tegn, og mer.

3. Den grunnleggende årsaken til problemet

Det opprinnelige UTF-8-formatet brukte én til seks byte og kunne kode opptil 31 tegn. Den nyeste UTF-8-spesifikasjonen bruker bare én til fire byte og kan kode opptil 21 biter, som er nøyaktig det som representerer alle 17 Unicode-plan. utf8 er et tegnsett i Mysql som kun støtter UTF-8-tegn opptil tre byte lange, som er det grunnleggende flertekstplanet i Unicode.

Hvorfor støtter UTF8 i Mysql bare UTF-8-tegn med maksimalt tre byte? Jeg tenkte på det, kanskje fordi da Mysql først ble utviklet, hadde ikke Unicode et hjelpeplan. På den tiden drømte Unicode-komiteen fortsatt om at «65 535 tegn er nok for hele verden». Strenglengder i Mysql teller tegn i stedet for bytes, og for CHAR-datatyper må strengene være lange nok. Når man bruker utf8-tegnsettet, er lengden som må bevares den lengste tegnlengden på utf8 multiplisert med strenglengden, så det er naturlig å begrense maksimal utf8-lengde til 3, for eksempel vil CHAR(100) Mysql beholde 300 byte. Når det gjelder hvorfor senere versjoner ikke støtter 4-byte UTF-8-tegn, tror jeg det ene er av bakoverkompatibilitetsgrunner, og det andre er at tegn utenfor det grunnleggende flerspråklige planet sjelden brukes.

For å lagre 4-byte UTF-8-tegn i Mysql kreves utf8mb4-tegnsettet, men det støttes kun etter versjon 5.5.3 (se versjon: velg versjon(); )。 Jeg mener at for bedre kompatibilitet bør du alltid bruke utf8mb4 i stedet for utf8.  For CHAR-type data bruker utf8mb4 mer plass, og ifølge den offisielle Mysql-anbefalingen, bruk VARCHAR i stedet for CHAR.







Foregående:Enkel bruk av ORM-rammeverket SqlSugar
Neste:HTTP-forespørselshode Expect forklares i detalj
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com