See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 27972|Vastuse: 0

[Allikas] Erinevus utf8 ja utf8mb4 vahel MySQL-is

[Kopeeri link]
Postitatud 2021-4-21 18:01:22 | | | |
Tundmatu märgikomplekt: utf8mb4
https://www.itsvse.com/thread-3199-1-1.html
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.







Eelmine:ORM raamistiku SqlSugar lihtne kasutamine
Järgmine:HTTP päringu päis Expect on üksikasjalikult selgitatud
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com