Mysql
 sql >> Datenbank >  >> RDS >> Mysql

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

UTF-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. Die MySQL-Kodierung namens „utf8“ (Alias ​​von „utf8mb3“) speichert jedoch nur maximal drei Bytes pro Codepunkt.

Der Zeichensatz "utf8"/"utf8mb3" kann also nicht alle Unicode-Codepunkte speichern:Er unterstützt nur den Bereich 0x000 bis 0xFFFF, der als "Grundlegendes mehrsprachiges Flugzeug ".Siehe auch Vergleich von Unicode-Codierungen .

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

Der Zeichensatz namens utf8[/utf8mb3] verwendet maximal drei Bytes pro Zeichen und enthält nur BMP-Zeichen. Ab MySQL 5.5.3 verwendet der utf8mb4-Zeichensatz 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 Kodierung, gleiche Länge.

  • Bei einem ergänzenden Zeichen kann utf8[/utf8mb3] das Zeichen überhaupt nicht speichern , während utf8mb4 vier Bytes zum Speichern benötigt. Da utf8[/utf8mb3] das Zeichen überhaupt nicht speichern kann, haben Sie keine zusätzlichen Zeichen in utf8[/utf8mb3]-Spalten und müssen sich keine Gedanken über die Konvertierung von Zeichen oder Datenverlust machen, wenn Sie utf8[/utf8mb3]-Daten von älteren Versionen von aktualisieren MySQL.

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