Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 27972|Odgovoriti: 0

[Vir] Razlika med utf8 in utf8mb4 v MySQL

[Kopiraj povezavo]
Objavljeno 21. 4. 2021 ob 18:01:22 | | | |
Neznan nabor znakov: utf8mb4
https://www.itsvse.com/thread-3199-1-1.html
1. Uvod

MySQL je to utf8mb4 kodiranje dodal po različici 5.5.3, kar pomeni, da je večina bajtov 4, in se posebej uporablja za združljivost s štiribajtnim unicode. Na srečo je utf8mb4 nadmnožica utf8 in ni potrebna nobena druga pretvorba, razen spremembe kodiranja v utf8mb4. Seveda je za prihranek prostora običajno dovolj uporabiti utf8.

2. Opis vsebine

Kot je bilo omenjeno zgoraj, ker lahko utf8 shrani večino kitajskih znakov, zakaj bi uporabljali utf8mb4? Največja dolžina znaka UTF8 kodiranja, ki ga podpira MySQL, je 3 bajte, in če naletite na širok znak s 4 bajti, boste vstavili izjemo. Največje število znakov Unicode, ki jih UTF-8 kodira s tremi bajti, je 0xffff, kar je osnovna večjezična ravnina (BMP) v Unicode. To pomeni, da nobenega Unicode znaka, ki ni v osnovni večbesedilni ravnini, ni mogoče shraniti z Mysql-ovim naborom znakov utf8. Sem spadajo emojiji (Emoji je posebna Unicode koda, ki jo pogosto najdemo na iOS in Android telefonih), številni redko uporabljeni kitajski znaki, pa tudi novi Unicode znaki in še več.

3. Osnovni vzrok problema

Izvirni format UTF-8 je uporabljal od enega do šestih bajtov in je lahko kodiral do 31 znakov. Najnovejša specifikacija UTF-8 uporablja le en do štiri bajte in lahko kodira do 21 bitov, kar predstavlja vseh 17 Unicode ravnin. utf8 je nabor znakov v Mysql, ki podpira le znake UTF-8 dolžine do treh bajtov, kar je osnovna večbesedilna ravnina v Unicode.

Zakaj UTF8 v MySQL podpira le znake UTF-8 z največ tremi bajti? Razmišljal sem o tem, morda zato, ker ko je bil MySQL prvič razvit, Unicode ni imel pomožne ravnine. Takrat je Unicode odbor še sanjal o "65.535 znakih je dovolj za ves svet". Dolžine nizov v MySQL štejejo znake namesto bajtov, za CHAR podatkovne tipe pa morajo biti nizi dovolj dolgi. Pri uporabi nabora znakov utf8 je dolžina, ki jo je treba ohraniti, najdaljša dolžina znakov utf8, pomnožena z dolžino niza, zato je naravno omejiti največjo dolžino utf8 na 3, na primer CHAR(100) Mysql bo ohranil 300 bajtov. Kar zadeva razlog, zakaj kasnejše različice ne podpirajo 4-bajtnih UTF-8 znakov, mislim, da je eden zaradi združljivosti za nazaj, drugi pa zato, ker se znaki zunaj osnovne večjezične ravnine redko uporabljajo.

Za shranjevanje 4-bajtnih UTF-8 znakov v Mysql je potreben nabor znakov utf8mb4, vendar je podprt šele po različici 5.5.3 (glej verzijo: select version(); )。 Mislim, da je za boljšo združljivost vedno priporočljivo uporabljati utf8mb4 namesto utf8.  Za podatke tipa CHAR utf8mb4 zavzame več prostora, in po uradnem priporočilu Mysql uporabite VARCHAR namesto CHAR.







Prejšnji:Preprosta uporaba ORM ogrodja SqlSugar
Naslednji:HTTP header Expect je podrobno pojasnjen
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com