1. Johdanto
MySQL lisäsi tämän utf8mb4-koodauksen version 5.5.3 jälkeen, mikä tarkoittaa useimpia tavuja 4, ja sitä käytetään erityisesti yhteensopivuuteen neljän tavun unicode-kanssa. Onneksi utf8mb4 on utf8:n yläjoukko, eikä muuta muunnosta tarvita kuin koodauksen muuttaminen utf8mb4:ään. Tietenkin tilan säästämiseksi riittää yleensä käyttää utf8:aa.
2. Sisällön kuvaus
Kuten edellä mainittiin, koska utf8 voi tallentaa suurimman osan kiinalaisista merkeistä, miksi käyttää utf8mb4:ää? MySQL:n tukeman UTF8-koodauksen maksimimerkkipituus on 3 tavua, ja jos kohtaat leveän 4 tavun merkin, lisäät poikkeuksen. UTF-8:n kolmen tavun maksimiUnicode-merkki on 0xffff, mikä on Unicoden perusmonikielinen taso (BMP). Toisin sanoen mitään Unicode-merkkiä, joka ei ole perusmonitekstitasolla, ei voi tallentaa Mysql:n utf8-merkistöllä. Näihin kuuluvat emojit (Emoji on erityinen Unicode-koodaus, jota käytetään yleisesti iOS- ja Android-puhelimissa) sekä monet harvinaisesti käytetyt kiinalaiset merkit sekä uudet Unicode-merkit ja paljon muuta.
3. Ongelman juurisyy
Alkuperäinen UTF-8-formaatti käytti yhdestä kuuteen tavua ja pystyi koodaamaan jopa 31 merkkiä. Uusin UTF-8-määrittely käyttää vain yhdestä neljään tavua ja voi koodata jopa 21 bittiä, mikä edustaa kaikkia 17 Unicode-tasoa. utf8 on Mysql:n merkistö, joka tukee vain enintään kolmen tavun pituisia UTF-8-merkkejä, mikä on Unicode-pelin perusmonitekstitaso.
Miksi UTF8 Mysql:ssä tukee vain UTF-8-merkkejä, joissa on enintään kolme tavua? Ajattelin asiaa, ehkä siksi, että kun Mysql kehitettiin, Unicodella ei ollut aputasoa. Tuolloin Unicode-komitea vielä haaveili "65 535 merkkiä riittää koko maailmalle". Mysql:n merkkijonojen pituudet laskevat merkkejä tavujen sijaan, ja CHAR-tietotyypeille merkkijonojen täytyy olla riittävän pitkiä. Kun käytetään utf8-merkistöä, säilytettävä pituus on utf8:n pisin merkkimerkin pituus kerrottuna merkkijonon pituudella, joten on luonnollista rajoittaa maksimiutf8-pituus 3:een, esimerkiksi CHAR(100) Mysql säilyttää 300 tavua. Mitä tulee siihen, miksi myöhemmät versiot eivät tue 4-tavuisia UTF-8-merkkejä, luulen, että toinen johtuu taaksepäin yhteensopivuudesta, ja toinen on se, että perusmonikielisen tason ulkopuolisia merkkejä käytetään harvoin.
4-tavuisten UTF-8-merkkien tallentamiseksi Mysql:ssä tarvitaan utf8mb4-merkkijoukko, mutta sitä tuetaan vasta version 5.5.3 jälkeen (katso versio: valitse versio(); )。 Mielestäni paremman yhteensopivuuden vuoksi kannattaa aina käyttää utf8mb4:ää utf8:n sijaan. CHAR-tyyppidatalle utf8mb4 vie enemmän tilaa, ja virallisen Mysql-suosituksen mukaan käytä VARCHARia CHAR:n sijaan.
|