Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 27972|Antwoord: 0

[Bron] Het verschil tussen utf8 en utf8mb4 in MySQL

[Link kopiëren]
Geplaatst op 21-4-2021 18:01:22 | | | |
1. Inleiding

MySQL voegde deze utf8mb4-codering toe na 5.5.3, wat betekent dat de meeste bytes 4 zijn, en deze wordt specifiek gebruikt om compatibel te zijn met vierbyte unicode. Gelukkig is utf8mb4 een superset van utf8, en is er geen andere conversie nodig behalve het wijzigen van de codering naar utf8mb4. Natuurlijk is het om ruimte te besparen meestal voldoende om utf8 te gebruiken.

2. Inhoudsbeschrijving

Zoals hierboven genoemd, aangezien utf8 de meeste Chinese karakters kan opslaan, waarom zou je dan utf8mb4 gebruiken? De maximale tekenlengte van UTF8-codering die door MySQL wordt ondersteund is 3 bytes, en als je een breed teken van 4 bytes tegenkomt, voeg je een uitzondering in. Het maximale Unicode-teken dat door UTF-8 van drie bytes wordt gecodeerd is 0xffff, wat het basismeertalige vlak (BMP) in Unicode is. Dat wil zeggen, elk Unicode-teken dat niet in het basis-multitekstvlak ligt, kan niet worden opgeslagen met de utf8-tekenset van Mysql. Deze omvatten emoji's (Emoji is een speciale Unicode-codering die vaak voorkomt op iOS- en Android-telefoons), en veel zelden gebruikte Chinese karakters, evenals nieuwe Unicode-tekens, en meer.

3. De onderliggende oorzaak van het probleem

Het oorspronkelijke UTF-8-formaat gebruikte één tot zes bytes en kon tot 31 tekens coderen. De nieuwste UTF-8-specificatie gebruikt slechts één tot vier bytes en kan tot 21 bits coderen, wat precies is wat alle 17 Unicode-vlakken vertegenwoordigt. utf8 is een tekenset in Mysql die slechts UTF-8-tekens tot drie bytes lang ondersteunt, wat het basis-multitekstvlak in Unicode is.

Waarom ondersteunt UTF8 in Mysql alleen UTF-8-tekens met maximaal drie bytes? Ik heb erover nagedacht, misschien omdat Unicode toen Mysql voor het eerst werd ontwikkeld, geen hulpvlak had. In die tijd droomde de Unicode-commissie nog van "65.535 tekens is genoeg voor de hele wereld". Stringlengtes in Mysql tellen tekens in plaats van bytes, en voor CHAR-datatypes moeten de strings lang genoeg zijn. Bij gebruik van de utf8-tekenset is de lengte die behouden moet blijven de langste tekenlengte van utf8 vermenigvuldigd met de stringlengte, dus het is logisch om de maximale utf8-lengte te beperken tot 3, bijvoorbeeld, CHAR(100) Mysql behoudt 300 bytes. Wat betreft waarom latere versies geen 4-byte UTF-8-tekens ondersteunen, denk ik dat het ene is vanwege achterwaartse compatibiliteit, en het andere is dat tekens buiten het basisniveau van meertaligheid zelden worden gebruikt.

Om 4-byte UTF-8-tekens in Mysql op te slaan, is de utf8mb4-tekenset vereist, maar deze wordt alleen ondersteund na versie 5.5.3 (zie versie: selecteer versie(); )。 Ik denk dat je voor betere compatibiliteit altijd utf8mb4 moet gebruiken in plaats van utf8.  Voor CHAR-type data neemt utf8mb4 meer ruimte in, en volgens de officiële Mysql-aanbeveling kun je VARCHAR gebruiken in plaats van CHAR.







Vorig:Eenvoudig gebruik van het ORM-framework SqlSugar
Volgend:HTTP-verzoekheader Expect wordt in detail uitgelegd
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com