it-swarm.com.de

Was ist der Unterschied zwischen den Zeichensätzen utf8mb4 und utf8 in MySQL?

Was ist der Unterschied zwischen utf8mb4 und utf8 Zeichensätzen in MySQL ?

Ich weiß bereits über ASCII, UTF-8 , UTF-16 und UTF-32 Kodierungen; aber ich bin gespannt, was der Unterschied von utf8mb4 Codierungsgruppen zu anderen in MySQL Server definierten Codierungstypen ist.

Gibt es spezielle Vorteile/Vorschläge für die Verwendung von utf8mb4 anstelle von utf8?

276

TF-8 ist eine Kodierung mit variabler Länge. Im Fall von UTF-8 bedeutet dies, dass das Speichern eines Codepunkts ein bis vier Bytes erfordert. In der MySQL-Codierung "utf8" (Alias ​​von "utf8mb3") werden jedoch nur maximal drei Bytes pro Codepunkt gespeichert.

Daher kann der Zeichensatz "utf8"/"utf8mb3" nicht alle Unicode-Codepunkte speichern: Er unterstützt nur den Bereich von 0x000 bis 0xFFFF, der als " Basic Multilingual Plane " bezeichnet wird. Siehe auch Vergleich von Unicode-Codierungen .

Dies ist, was (eine frühere Version derselben Seite unter) die MySQL-Dokumentation dazu zu sagen hat:

Der Zeichensatz mit dem Namen utf8 [/ utf8mb3] verwendet maximal drei Bytes pro Zeichen und enthält nur BMP Zeichen. Ab MySQL 5.5.3 verwendet der Zeichensatz utf8mb4 maximal vier Bytes pro Zeichen und unterstützt zusätzliche Zeichen:

  • Für ein BMP -Zeichen haben utf8 [/ utf8mb3] und utf8mb4 identische Speichereigenschaften: gleiche Codewerte, gleiche Codierung, gleiche Länge.

  • Für ein zusätzliches Zeichen kann utf8 [/ utf8mb3] das Zeichen überhaupt nicht speichern , während utf8mb4 vier Bytes benötigt, um es zu speichern. Da utf8 [/ utf8mb3] das Zeichen überhaupt nicht speichern kann, sind in utf8 [/ utf8mb3] -Spalten keine zusätzlichen Zeichen enthalten, und Sie müssen sich keine Gedanken über das Konvertieren von Zeichen oder den Verlust von Daten beim Upgrade von utf8 [/ utf8mb3] -Daten aus älteren Versionen von machen MySQL.

Wenn Sie also möchten, dass Ihre Spalte das Speichern von Zeichen unterstützt, die außerhalb von BMP liegen (und dies normalerweise möchten), wie z. B. emoji , verwenden Sie "utf8mb4". Siehe auch Was sind die am häufigsten verwendeten Nicht-BMP-Unicode-Zeichen? .

326
CodeCaster

Der Zeichensatz utf8mb4 ist nützlich, da heutzutage nicht nur Sprachzeichen, sondern auch Symbole, neu eingeführte Emojis usw. gespeichert werden müssen.

Eine nette Lektüre Wie man vollen Unicode in MySQL-Datenbanken unterstützt von Mathias Bynens kann auch etwas Licht ins Dunkel bringen.

48
Jimmy Kane

Entnommen aus MySQL 8.0 Referenzhandbuch :

  • utf8mb4: Eine UTF-8 Kodierung des Unicode Zeichensatzes mit ein bis vier Bytes pro Zeichen.

  • utf8mb3: Eine UTF-8 Kodierung des Unicode Zeichensatzes mit ein bis drei Bytes pro Zeichen.

In MySQL utf8 ist derzeit ein Alias ​​für utf8mb3, das veraltet ist und wird in einer zukünftigen MySQL Version entfernt. Zu diesem Zeitpunkt wird utf8 zu einem Verweis auf utf8mb4.

Unabhängig von diesem Alias ​​können Sie sich also bewusst eine utf8mb4 Kodierung setzen.

27
simhumileco