Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 27972|Atsakyti: 0

[Šaltinis] Skirtumas tarp utf8 ir utf8mb4 MySQL

[Kopijuoti nuorodą]
Publikuota: 2021-4-21 18:01:22 | | | |
Nežinomas simbolių rinkinys: utf8mb4
https://www.itsvse.com/thread-3199-1-1.html
1. Įvadas

MySQL pridėjo šį utf8mb4 kodavimą po 5.5.3, o tai reiškia, kad dauguma baitų 4, ir yra specialiai naudojamas, kad būtų suderinamas su keturių baitų unikodu. Laimei, utf8mb4 yra utf8 superaibė ir nereikia jokio kito konvertavimo, išskyrus kodavimo pakeitimą į utf8mb4. Žinoma, norint sutaupyti vietos, paprastai pakanka naudoti utf8.

2. Turinio aprašymas

Kaip minėta aukščiau, kadangi utf8 gali išsaugoti daugumą kinų rašmenų, kodėl verta naudoti utf8mb4? Didžiausias MySQL palaikomo UTF8 kodavimo simbolių ilgis yra 3 baitai, o jei susidursite su plačiu 4 baitų simboliu, įterpsite išimtį. Maksimalus trijų baitų UTF-8 užkoduotas Unicode simbolis yra 0xffff, kuris yra pagrindinė daugiakalbė plokštuma (BMP) Unicode. Tai reiškia, kad bet koks Unicode simbolis, kuris nėra pagrindinėje multiteksto plokštumoje, negali būti saugomas naudojant MySQL utf8 simbolių rinkinį. Tai apima jaustukus ("Emoji" yra specialus "Unicode" kodavimas, dažniausiai randamas "iOS" ir "Android" telefonuose) ir daug neretai naudojamų kinų simbolių, taip pat bet kokius naujus "Unicode" simbolius ir kt.

3. Pagrindinė problemos priežastis

Originalus UTF-8 formatas naudojo nuo vieno iki šešių baitų ir galėjo koduoti iki 31 simbolio. Naujausia UTF-8 specifikacija naudoja tik nuo vieno iki keturių baitų ir gali koduoti iki 21 bito, o tai yra būtent tai, kas atspindi visas 17 Unicode plokštumų. utf8 yra MySQL simbolių rinkinys, palaikantis tik iki trijų baitų ilgio UTF-8 simbolius, kurie yra pagrindinė kelių tekstų plokštuma Unicode.

Kodėl UTF8 MySQL palaiko tik UTF-8 simbolius, kurių daugiausiai yra trys baitai? Aš galvojau apie tai, gal todėl, kad kai MySQL buvo pirmą kartą sukurtas, Unicode neturėjo pagalbinės plokštumos. Tuo metu Unicode komitetas vis dar svajojo apie "65 535 simbolių užtenka visam pasauliui". MySQL eilučių ilgiai skaičiuoja simbolius, o ne baitus, o CHAR duomenų tipams eilutės turi būti pakankamai ilgos. Naudojant utf8 simbolių rinkinį, ilgis, kurį reikia išsaugoti, yra ilgiausias utf8 simbolių ilgis, padaugintas iš eilutės ilgio, todėl natūralu apriboti maksimalų utf8 ilgį iki 3, pavyzdžiui, CHAR(100) Mysql išlaikys 300 baitų. Kalbant apie tai, kodėl vėlesnės versijos nepalaiko 4 baitų UTF-8 simbolių, manau, kad viena yra dėl atgalinio suderinamumo priežasčių, o kita yra ta, kad simboliai už pagrindinės daugiakalbės plokštumos ribų yra retai naudojami.

Norint išsaugoti 4 baitų UTF-8 simbolius Mysql, reikalingas utf8mb4 simbolių rinkinys, tačiau jis palaikomas tik po 5.5.3 versijos (žr. versiją: pasirinkite versiją (); )。 Manau, kad dėl geresnio suderinamumo visada turėtumėte naudoti utf8mb4, o ne utf8.  CHAR tipo duomenims utf8mb4 užima daugiau vietos, o pagal oficialią MySQL rekomendaciją vietoj CHAR naudokite MARCHAR.







Ankstesnis:Paprastas ORM sistemos naudojimas SqlSugar
Kitą:HTTP užklausos antraštė Tikėtis yra išsamiai paaiškinta
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com