Was ist uft8mb4?

https://www.bennadel.com/blog/3074-stripping-supplementary-characters-out-of-a-string-in-order-to-make-it-mysql-utf-8-compatible.htm

https://www.bennadel.com/blog/3074-stripping-supplementary-characters-out-of-a-string-in-order-to-make-it-mysql-utf-8-compatible.htm

Wenn du eine Website mit einem Content Management System wie Drupal, Joomla oder WordPress betreibst, ist dir sicherlich schon mal die Abkürzung utf8mb4 aufgefallen. Die Abkürzung erscheint oft in Meldungen im Backend deiner Website auf, die dich auffordern, doch endlich mal von utf8 auf utf8mb4 zu konvertieren. Auch wenn das Thema schon seit mehr als fünf Jahren aktuell ist, taucht es doch immer wieder auf.

Nun ist das mit dem Konvertieren ja immer so eine Sache und deswegen will ich da mal nachhaken.

  • Was ist utf8mb4?
  • Warum soll ich konvertieren?
  • Wie stelle ich um?
  • Was kann schief gehen?

Was ist utf8mb4?

So grundsätzlich geht bei diesem Thema um Buchstaben wie a, b, c, d, e, ... und deren Speicherung. Außer Buchstaben gibt es auch Symbole, Ziffern und andere Zeichen. Daher passt das Wort Zeichensatz als Bezeichnung besser als das Wort Alphabet. Einer der älteste Computer-Zeichensätze ist ASCII (American Standard Code for Information Interchang) aus dem Jahr 1963. Er definiert 128 Zeichen (33 nicht druckbar, 95 druckbar).
Das sind die druckbaren Zeichen, beginnend mit dem Leerzeichen:

 !"#$%&'()*+,-./0123456789:;<=>?
@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
`abcdefghijklmnopqrstuvwxyz{|}~  

ASCII umfasst das lateinische Alphabet in Groß- und Kleinschreibung, die zehn arabischen Ziffern und ein paar Interpunktion- und Sonderzeichen. Außer ASCII gab es dutzende anderer Standards, die natürlich nicht kompatibel zueinander waren. Benötigt wurde ein Zeichensatz für alle Schriftzeichen dieser Welt. Im Jahr 1991 war es soweit und Unicode (Universal Coded Character Set) erblickte mit 7,161 Zeichen das Licht der Welt.

Schnell stellte sich heraus, dass es viel mehr Zeichen auf der Welt gibt und so wird im Juni 2017 voraussichtlich Unicode in der Version 10.0 mit 136,690 Zeichen veröffentlicht. Diese Version wird übrigens das Bitcoin Zeichen enthalten!

Unicode wird mittlerweile von allen Computern genutzt und vereinfacht die weltweite Darstellung von Zeichen ungemein. Die weitere Entwicklung ist allerdings auch immer mit Kritik verbunden. Es geht dabei um Streitfragen wie die Vereinheitlichung des chinesischen Hanzi, japanischen Kanji und koreanischen Hanja (Han-Vereinheitlichung) oder die Reihenfolge der Wörter bei der Sortierung. In Thailand werden Worte nicht logisch, wie in Unicode, sondern visuell sortiert. Sortierte Listen sind per Architektur also ein Quell steter Diskussionen.

UTF-8 ist die Abkürzung für 8-Bit UCS Transformation Format (UCS wiederum für Universal Character Set). UTF-8 ist die am weitesten verbreitete Kodierung für Unicode-Zeichen. Es ist quasi „die“ globale Zeichenkodierung im Internet.

UTF-8 ist auch eine „platzsparende“ Methode zur Abbildung von Unicode Zeichen vor allem für Schriften, die auf dem lateinischen Alphabet basieren. Im April 2017 verwendeten 88,9 % aller Websites UTF-8. Außer UTF-8 gibt es noch UTF-16 und UTF-32, die viel einfacher kodiert sind, aber erheblich mehr Speicherbedarf haben. Man spricht dort auch nicht mehr von Zeichen, sondern von Unicode „Codepoints“. Der Grund sind Zeichen mit ungewöhnlichen oder mehrfachen Akzenten, wie sie beispielsweise im vietnamesischen vorkommen. Sie benötigen mehrere Codepoints zur korrekten Darstellung.

All diese Zeichen müssen irgendwo gespeichert werden und so beschlossen Michael Widenius und David Axmark 1994 die Datenbank MySQL zu bauen. Heute ist es vermutlich das am meisten verbreitete Open Source Datenbankverwaltungssystem der Welt. MySQL speichert Daten. Mit Hilfe der Abfragesprache SQL können Daten abgefragt werden. Hier ein Beispiel das auch ganz gut zeigt, wie wichtig „richtige“ Zeichen sind:

SELECT nummer, name
FROM mensch
WHERE name = 'Hagen';

Als Ergebnis erscheint dann eine „Liste“ mit Nummern, die zum Namen Hagen „gehören“.

Tabellen in MySQL haben einen Standard Zeichensatz. Wenn der utf8 ist, enthält er „nur“ die Zeichen der BMP (Basic Multilingual Plane). Dafür benutzt MySQL drei Bytes Speicherplatz für ein Unicode BMP Zeichen. Außerhalb der BMP gibt es Unicode Zeichen, die vier Bytes zur Speicherung benötigen. Um auch diese Zeichen verwenden zu können, muss der Platz erweitert werden und der Zeichensatz utf8mb4 anstelle utf8 verwendet werden. Das utf8mb4 nutzt vier Bytes für die Speicherung.

Warum soll ich konvertieren?

Wenn utf8 bisher funktioniert hat, warum soll ich dann utf8mb4 nutzen?

  • Der erste Grund ist die Sicherheit. In älteren Joomla und WordPress Versionen konnte die Einstellung utf8 in bestimmten Situationen zu Datenverlust führen.
  • Der zweite Grund ist die Möglichkeit der Darstellung von Emojis, beispielsweise das Zeichen U+01F4A9 Pile of Poo (💩).
    Ohne utf8mb4 geht das nicht 🙂

Welcher der beiden Gründe den Ausschlag zum Konvertieren gibt, musst du für dich selbst beantworten.

Wie stelle ich um?

  • WordPress – macht die Umstellung automatisch wenn vorher das utf8 Format genutzt wurde (The utf8mb4 Upgrade).
  • Drupal – Es gibt ein Modul für die Umstellung (utf8mb4_convert)
  • Joomla – Die Umstellung sollte automatisch funktionieren. Unter dem Menüpunkt Erweiterungen -> Verwalten -> Datenbanken kannst du auf den reparieren Button klicken und die Tabellen werden umgestellt.

Kann etwas schief gehen?

Nein, utf8mb4 ist 100 % abwärtskompatibel (Ein vorhandenes Backup beruhigt allerdings die Nerven).

Links


tl;dr: utf8mb4 ist das „neue“ utf8

Autor: Hagen Graf

consultant, author, trainer, solution finder, web architect, developer, open source lover, visionary, orator, the good old webmaster. Able to simplify!

Kommentar verfassen