Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 27972|Válasz: 0

[Forrás] A különbség az utf8 és utf8mb4 között a MySQL-ben

[Linket másol]
Közzétéve: 2021-4-21 18:01:22 | | | |
Ismeretlen karakterkészlet: utf8mb4
https://www.itsvse.com/thread-3199-1-1.html
1. Bevezetés

A MySQL ezt az utf8mb4 kódolást az 5.5.3 után adta hozzá, ami a legtöbb bájt 4-et jelent, és kifejezetten a négy bájtos unicode kompatibilis megoldására szolgál. Szerencsére az utf8mb4 az utf8 egy felhalmaza, és nincs szükség más átalakításra, csak utf8mb4-re történő kódolás módosítása. Természetesen a helymegtakarítás érdekében általában elég az utf8 használata.

2. Tartalomleírás

Ahogy fentebb említettük, mivel az utf8 a legtöbb kínai karaktert el tudja menteni, miért használjuk utf8mb4-et? Az UTF8 kódolás maximális karakterhossza, amelyet a MySQL támogat, 3 bájt, és ha 4 bájtos széles karaktert találsz, kivételt adsz be. Az UTF-8 által kódolt maximális Unicode karakter három bájtból 0xffff, ami az Unicode alapvető többnyelvű síkja (BMP). Vagyis bármely Unicode karakter, amely nem az alap multitextus síkon van, nem tárolható a MySQL utf8 karakterkészletével. Ezek közé tartoznak az emojik (az emoji egy speciális Unicode kódolás, amely gyakran megtalálható iOS és Android telefonokon), valamint sok ritkán használt kínai karakter, valamint bármilyen új Unicode karakter és még sok más.

3. A probléma gyökere

Az eredeti UTF-8 formátum egytől hatig bájtot használt, és akár 31 karaktert is képes volt kódolni. A legújabb UTF-8 specifikáció csak egy-négy bájtot használ, és akár 21 bitet is képes kódolni, ami pontosan az összes 17 Unicode síkot képviseli. Az utf8 egy MySQL karakterkészlet, amely csak három bájt hosszú, UTF-8 karaktereket támogat, ami az Unicode alapvető többszöveges síkja.

Miért támogatja az UTF8 a Mysql-ben csak az UTF-8 karaktereket, amelyeknek maximum három bájtja lehet? Gondolkodtam rajta, talán azért, mert amikor a Mysql először fejlesztették, a Unicode-nak nem volt segédgépe. Akkoriban a Unicode Bizottság még mindig arról álmodott, hogy "65 535 karakter elég az egész világnak". A Mysql-ben a stringhosszok bájtok helyett karaktereket számolnak, és a CHAR adattípusokhoz a stringeknek elég hosszúnak kell lenniük. Az utf8 karakterhalmaz használatakor a fenntartandó hossz az utf8 leghosszabb karakterhossza szorozva a lánc hosszával, így természetes, hogy a maximális utf8 hosszát 3-ra korlátozzuk, például a CHAR(100) Mysql 300 bájtot tart meg. Ami azt illeti, hogy a későbbi verziók miért nem támogatják a 4 bájtos UTF-8 karaktereket, az egyik az visszafelé kompatibilitás, a másik pedig az, hogy az alap többnyelvű síkon kívüli karaktereket ritkán használják.

A 4 bájtos UTF-8 karakterek Mysql-ben mentéséhez utf8mb4 karakterkészlet szükséges, de csak az 5.5.3-as verzió után támogatott (lásd verzió: select version(); )。 Szerintem a jobb kompatibilitás érdekében mindig használd az utf8mb4-et az utf8 helyett.  CHAR típusú adatokhoz az utf8mb4 több helyet foglal, és a hivatalos Mysql ajánlása szerint a VARCHAR-t használjuk a CHAR helyett.







Előző:Az ORM keretrendszer SqlSugar egyszerű használata
Következő:HTTP kérés fejlécéje Expect részletesen el van magyarázva
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com