1. Ievads
MySQL pievienoja šo utf8mb4 kodējumu pēc 5.5.3, kas nozīmē lielāko daļu baitu 4, un tas ir īpaši izmantots, lai būtu saderīgs ar četru baitu unikodu. Par laimi, utf8mb4 ir utf8 virskopa, un nav nepieciešama nekāda cita konvertēšana, izņemot kodējuma maiņu uz utf8mb4. Protams, lai ietaupītu vietu, parasti pietiek ar utf8 izmantošanu.
2. Satura apraksts
Kā minēts iepriekš, tā kā utf8 var saglabāt lielāko daļu ķīniešu rakstzīmju, kāpēc izmantot utf8mb4? MySQL atbalstītā UTF8 kodējuma maksimālais rakstzīmju garums ir 3 baiti, un, ja saskaraties ar 4 baitu platu rakstzīmi, jūs ievietosiet izņēmumu. Maksimālā Unicode rakstzīme, ko kodē UTF-8 no trim baitiem, ir 0xffff, kas ir pamata daudzvalodu plakne (BMP) Unicode. Tas nozīmē, ka jebkuru Unicode rakstzīmi, kas nav pamata daudztekstu plaknē, nevar saglabāt, izmantojot MySQL utf8 rakstzīmju kopu. Tie ietver emocijzīmes (Emoji ir īpašs Unicode kodējums, kas parasti atrodams iOS un Android tālruņos) un daudzas neparasti izmantotas ķīniešu rakstzīmes, kā arī visas jaunās Unicode rakstzīmes un daudz ko citu.
3. Problēmas pamatcēlonis
Oriģinālais UTF-8 formāts izmantoja vienu līdz sešus baitus un varēja kodēt līdz 31 rakstzīmei. Jaunākā UTF-8 specifikācija izmanto tikai vienu līdz četrus baitus un var kodēt līdz 21 bitam, kas ir tieši tas, kas pārstāv visas 17 Unicode plaknes. utf8 ir rakstzīmju kopa Mysql, kas atbalsta tikai UTF-8 rakstzīmes līdz trim baitiem, kas ir pamata daudztekstu plakne Unicode.
Kāpēc UTF8 MySQL atbalsta tikai UTF-8 rakstzīmes ar ne vairāk kā trim baitiem? Es par to domāju, varbūt tāpēc, ka tad, kad MySQL pirmo reizi tika izstrādāts, Unicode nebija palīgplaknes. Tajā laikā Unicode komiteja vēl sapņoja par "65 535 rakstzīmēm pietiek visai pasaulei". Virknes garums Mysql skaita rakstzīmes, nevis baitus, un CHAR datu tipiem virknēm jābūt pietiekami garām. Izmantojot utf8 rakstzīmju kopu, saglabājamais garums ir utf8 garākais rakstzīmju garums, kas reizināts ar virknes garumu, tāpēc ir dabiski ierobežot maksimālo utf8 garumu līdz 3, piemēram, CHAR(100) Mysql saglabās 300 baitus. Kas attiecas uz to, kāpēc nākamās versijas neatbalsta 4 baitu UTF-8 rakstzīmes, es domāju, ka viena ir atpakaļsaderības apsvērumu dēļ, bet otra ir tā, ka rakstzīmes ārpus pamata daudzvalodu plaknes tiek izmantotas reti.
Lai saglabātu 4 baitu UTF-8 rakstzīmes Mysql, ir nepieciešama utf8mb4 rakstzīmju kopa, bet tā tiek atbalstīta tikai pēc versijas 5.5.3 (skatīt versiju: select version(); )。 Es domāju, ka labākai saderībai vienmēr vajadzētu izmantot utf8mb4, nevis utf8. CHAR tipa datiem utf8mb4 patērē vairāk vietas, un saskaņā ar oficiālo Mysql ieteikumu izmantojiet CARCHAR, nevis CHAR.
|