1. Sissejuhatus
MySQL lisas selle utf8mb4 kodeeringu pärast versiooni 5.5.3, mis tähendab enamikku baite 4, ning seda kasutatakse spetsiaalselt neljabaidise unicode'iga ühilduvaks. Õnneks on utf8mb4 utf8 ülemkomplekt ja muud teisendamist pole vaja peale kodeerimise muutmise utf8mb4-ks. Muidugi, ruumi säästmiseks piisab tavaliselt utf8 kasutamisest.
2. Sisu kirjeldus
Nagu eespool mainitud, kuna utf8 suudab salvestada enamikku hiina märke, miks kasutada utf8mb4? MySQL-i toetatud UTF8 kodeerimise maksimaalne tähemärgi pikkus on 3 baiti, ja kui kohtad laia 4-baidise tähemärki, lisatakse erand. UTF-8 poolt kodeeritud maksimaalne Unicode'i tähemärk kolmest baidist on 0xffff, mis on Unicode'i põhiline mitmekeelne tasand (BMP). See tähendab, et ühtegi Unicode'i märki, mis ei asu põhilises multitekstitasandis, ei saa salvestada Mysql-i utf8 märgikomplektiga. Nende hulka kuuluvad emotikonid (emotikonid on eriline Unicode'i kodeerimine, mida leidub sageli iOS-i ja Androidi telefonides) ning paljud haruldased hiina märgid, samuti uued Unicode'i märgid ja palju muud.
3. Probleemi juurpõhjus
Algne UTF-8 formaat kasutas üht kuni kuut baiti ja suutis kodeerida kuni 31 märki. Viimane UTF-8 spetsifikatsioon kasutab vaid ühte kuni nelja baiti ja suudab kodeerida kuni 21 bitti, mis on täpselt see, mis esindab kõiki 17 Unicode'i tasandit. utf8 on MySQL märgistik, mis toetab ainult kuni kolme baiti pikkuseid UTF-8 märke, mis on Unicode'i põhiline mitme teksti tasand.
Miks toetab UTF8 Mysql-is ainult UTF-8 märke, millel on maksimaalselt kolm baiti? Mõtlesin selle üle, võib-olla sellepärast, et kui MySQL esmakordselt välja töötati, polnud Unicode'il abiplaani. Sel ajal unistas Unicode'i komitee veel "65 535 tähemärki on kogu maailmale piisav". Mysql-i stringide pikkused loendavad tähemärke, mitte baite, ning CHAR-andmetüüpide puhul peavad stringid olema piisavalt pikad. utf8 märgikomplekti kasutamisel tuleb säilitada utf8 pikim märgipikkus korrutatud stringi pikkusega, seega on loomulik piirata maksimaalne utf8 pikkus 3-ga, näiteks CHAR(100) Mysql säilitab 300 baiti. Miks hilisemad versioonid ei toeta 4-baidiseid UTF-8 märke, siis üks neist on tagurpidi ühilduvuse põhjuseks ja teine on see, et tavalisest mitmekeelsest tasandist väljaspool olevaid märke kasutatakse harva.
4-baidiste UTF-8 märkide salvestamiseks Mysql-is on vaja utf8mb4 märgikomplekti, kuid seda toetatakse alles pärast versiooni 5.5.3 (vt versioon: select version(); )。 Arvan, et parema ühilduvuse jaoks peaksid alati kasutama utf8mb4 asemel utf8. CHAR-tüüpi andmete jaoks võtab utf8mb4 rohkem ruumi ja vastavalt Mysql-i ametlikule soovitusele tuleks kasutada VARCHARi CHAR-i asemel.
|