Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 27972|Odpověď: 0

[Zdroj] Rozdíl mezi utf8 a utf8mb4 v MySQL

[Kopírovat odkaz]
Zveřejněno 2021-4-21 18:01:22 | | | |
Neznámá znaková sada: utf8mb4
https://www.itsvse.com/thread-3199-1-1.html
1. Úvod

MySQL přidal toto kódování utf8mb4 po verzi 5.5.3, což znamená většinu bajtů 4, a je speciálně použito pro kompatibilitu se čtyřbajtovým unicodem. Naštěstí je utf8mb4 nadmnožina utf8 a není potřeba žádná jiná konverze kromě změny kódování na utf8mb4. Samozřejmě, aby se ušetřilo místo, obvykle stačí použít utf8.

2. Popis obsahu

Jak už bylo zmíněno, když utf8 uloží většinu čínských znaků, proč používat utf8mb4? Maximální délka znaku kódování UTF8 podporovaného MySQL je 3 bajty, a pokud narazíte na široký znak o velikosti 4 bajty, vložíte výjimku. Maximální počet tří bajtů kódovaných v Unicode znaku v UTF-8 je 0xffff, což je základní vícejazyčná rovina (BMP) v Unicode. To znamená, že jakýkoli Unicode znak, který není v základní multitextové rovině, nelze uložit pomocí znakové sady utf8 Mysql. Patří sem emoji (Emoji je speciální Unicode kódování, běžné na iOS a Android telefonech), mnoho neobvykle používaných čínských znaků, stejně jako nové Unicode znaky a další.

3. Kořenová příčina problému

Původní formát UTF-8 používal od jednoho do šesti bajtů a mohl kódovat až 31 znaků. Nejnovější specifikace UTF-8 používá pouze jeden až čtyři bajty a dokáže kódovat až 21 bitů, což přesně reprezentuje všech 17 Unicode rovin. utf8 je znaková sada v Mysql, která podporuje pouze znaky UTF-8 do délky tří bajtů, což je základní vícetextová rovina v Unicode.

Proč UTF8 v MySQL podporuje pouze znaky UTF-8 s maximálně třemi bajty? Přemýšlel jsem o tom, možná proto, že když byl MySQL poprvé vyvíjen, Unicode neměl pomocnou rovinu. V té době výbor Unicode stále snil o "65 535 znaků stačí pro celý svět". Délky řetězců v Mysql počítají znaky spíše než bajty, a u datových typů s CHAR musí být řetězce dostatečně dlouhé. Při použití znakové sady utf8 je délka, kterou je třeba zachovat, nejdelší délka znaku utf8 vynásobená délkou řetězce, takže je přirozené omezit maximální délku utf8 na 3, například CHAR(100) Mysql si zachová 300 bajtů. Co se týče toho, proč pozdější verze nepodporují 4bajtové znaky UTF-8, myslím, že jedním z důvodů je zpětná kompatibilita, a druhým je, že znaky mimo základní vícejazyčnou rovinu se téměř nepoužívají.

Pro uložení 4bajtových znaků UTF-8 v Mysql je vyžadována znaková sada utf8mb4, ale je podporována až po verzi 5.5.3 (viz verze: select version(); )。 Myslím, že pro lepší kompatibilitu byste měli vždy používat utf8mb4 místo utf8.  Pro data typu CHAR zabírá utf8mb4 více místa a podle oficiálního doporučení Mysql použijte místo CHAR VARCHAR.







Předchozí:Jednoduché použití ORM frameworku SqlSugar
Další:HTTP request header Expect je podrobně vysvětlen
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com