Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 27972|Svar: 0

[Kilde] Forskellen mellem utf8 og utf8mb4 i MySQL

[Kopier link]
Opslået den 21-4-2021 18:01:22 | | | |
1. Introduktion

MySQL tilføjede denne utf8mb4-kodning efter 5.5.3, hvilket betyder de fleste bytes 4, og den bruges specifikt til at være kompatibel med fire-byte unicode. Heldigvis er utf8mb4 en supermængde af utf8, og ingen anden konvertering er nødvendig end at ændre kodningen til utf8mb4. Selvfølgelig er det som regel nok at bruge utf8 for at spare plads.

2. Indholdsbeskrivelse

Som nævnt ovenfor, da utf8 kan gemme de fleste kinesiske tegn, hvorfor så bruge utf8mb4? Den maksimale tegnlængde for UTF8-kodning, som MySQL understøtter, er 3 bytes, og hvis du støder på et bredt tegn på 4 bytes, indsætter du en undtagelse. Det maksimale Unicode-tegn, der kodes af UTF-8 på tre bytes, er 0xffff, hvilket er det grundlæggende flersprogede plan (BMP) i Unicode. Det vil sige, at ethvert Unicode-tegn, der ikke er i det grundlæggende multitekstplan, ikke kan gemmes ved hjælp af Mysqls utf8-tegnsæt. Disse inkluderer emojis (Emoji er en særlig Unicode-kodning, der ofte findes på iOS- og Android-telefoner), samt mange usædvanlige kinesiske tegn, samt eventuelle nye Unicode-tegn og mere.

3. Rodårsagen til problemet

Det oprindelige UTF-8-format brugte én til seks bytes og kunne kode op til 31 tegn. Den nyeste UTF-8-specifikation bruger kun en til fire bytes og kan kode op til 21 bit, hvilket præcis repræsenterer alle 17 Unicode-planer. utf8 er et tegnsæt i Mysql, der kun understøtter UTF-8-tegn op til tre bytes lange, hvilket er det grundlæggende multitekstplan i Unicode.

Hvorfor understøtter UTF8 i Mysql kun UTF-8-tegn med maksimalt tre bytes? Jeg tænkte over det, måske fordi da Mysql først blev udviklet, havde Unicode ikke et hjælpeplan. På det tidspunkt drømte Unicode-komitéen stadig om "65.535 tegn er nok til hele verden". Strenglængder i Mysql tæller tegn i stedet for bytes, og for CHAR-datatyper skal strengene være lange nok. Når man bruger utf8-tegnsættet, er den længde, der skal bevares, den utf8's længste tegnlængde ganget med strenglængden, så det er naturligt at begrænse den maksimale utf8-længde til 3, for eksempel vil CHAR(100) Mysql bevare 300 bytes. Hvad angår hvorfor efterfølgende versioner ikke understøtter 4-byte UTF-8-tegn, tror jeg, at det ene skyldes bagudkompatibilitet, og det andet er, at tegn uden for det grundlæggende flersprogede plan sjældent bruges.

For at gemme 4-byte UTF-8-tegn i Mysql kræves tegnsættet utf8mb4, men det understøttes kun efter version 5.5.3 (se version: vælg version(); )。 Jeg synes, at for bedre kompatibilitet bør du altid bruge utf8mb4 i stedet for utf8.  For CHAR-type data bruger utf8mb4 mere plads, og ifølge den officielle Mysql-anbefaling skal man bruge VARCHAR i stedet for CHAR.







Tidligere:Simpel brug af ORM-rammeværket SqlSugar
Næste:HTTP-anmodningsheader Expect forklares i detaljer
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com