Beim Update auf WordPress 4.2 wurde der Zeichensatz der Datenbank von utf8
auf utf8mb4
umgestellt (zum Beispiel notwendig für die volle Unterstützung von Emojis), sofern ein paar Voraussetzungen erfüllt waren. Hier zeige ich, wie ihr diese Umstellung manuell vornehmen könnt, wenn ihr bei dem 4.2-Update die Anforderungen noch nicht erfüllt habt.
Anforderungen für das utf8mb4
-Update
Wie im Beitrag »The utf8mb4 Upgrade« von Gary Pendergast zu lesen, sind folgende Voraussetzungen zu erfüllen:
- Ihr nutzt aktuell den
utf8
-Zeichensatz. - Ihr habt eine MySQL-Version höher oder gleich 5.5.3 (oder eine 10.x-Version von MariaDB).
- Die MySQL-Client-Bibliotheken sind 5.5.3 oder höher. Bei
mysqlnd
5.0.9 oder höher.
Da mein Hoster Uberspace wegen CentOS 6 die MySQL-Vorgabe aktuell noch nicht erfüllt, habe ich diese Umstellung bei 4.2 nicht automatisch mitgemacht. Als ich heute beim Speichern eines Emojis gescheitert bin und Bernhard Kau mich auf den Pfad mit utf8mb4
gebracht hat, habe ich mich nach einer Lösung umgesehen. Im Beitrag »utf8mb4 auf uberspace« auf crusy.net bin ich fündig geworden – die Lösung ist eine Umstellung auf MariaDB.
Wenn ihr inzwischen einfach eine ausreichende MySQL-Version habt oder auswählen könnt, dann könnt ihr vermutlich über phpMyAdmin oder ähnliche Tools den Zeichensatz der Datenbank anpassen (das habe ich aber nicht getestet, da es bei mir aktuell wegen des obigen Umstandes nur lokal eine Lösung wäre).
In jedem Fall müssen die Tabellen danach noch auf utf8mb4
umgestellt werden – die Änderung des Datenbank-Zeichensatzes reicht nicht aus.
Tabellen auf utf8mb4
umstellen
Auf wordpress.stackexchange.com bin ich auf eine Lösung für dieses Problem gestoßen. Dabei wird die Update-Routine von 4.2 (beziehungsweise 4.3, da das Core-Team von WordPress das bei 4.3 auch nochmal durchgeführt hat, um weitere Sites umzustellen) in ein Plugin oder die functions.php
eures Themes eingefügt und über den URL-Parameter ?update-utf8bm4=1
aufgerufen. Dadurch werden alle Tabellen auf utf8mb4
umgestellt, bei denen das automatisch möglich ist.
Ich habe das in ein kleines Plugin gepackt, das ihr als Gist auf GitHub finden könnt. Bei einer Multisite müsst ihr den Parameter von jeder der Sites aufrufen. Wenn ihr die Änderung vorgenommen habt, solltet ihr das Plugin wieder löschen!
Guter Bericht. Vielen Dank.
Ich weis nun nicht warum ich auf utf8mb4 umstellen sollte. Was ist der Unterschied zu utf8? Und welchen Vorteil hat eine Umstellung?
Hi Schoelu,
ich hatte mit
utf8
(kann nur Zeichen mit drei Bytes speichern) Probleme bei der Speicherung diverser Emojis –utf8mb4
kann auch Zeichen speichern, die vier Bytes benötigen, und dazu gehören unter anderem (mindestens einige) Emojis 🙂Vielen lieben Dank für diese Anleitung, ich habe seit Wochen das selbe Problem, das ich nur wenige oder kaum Emojis nutzen kann, da sie nicht gespeichert wurden!!
Freut mich, dass der Artikel hilfreich war 🙂
Ach, warum das Ganze? Das hätte doch an den Anfang des Artikels gehört, damit man überhaupt einen Grund erkennt, den Artikel zu lesen...
Lernt man schon in der Schule beim Aufsatzschreiben ;=)
nichts für ungut, aber was nützt ein Tutorial wenn man nicht weiß obs einen interessieren sollte?
Jo, hast du Recht – habe da mal ein bisschen was ergänzt.
Hallo Florian,
vor dem Update meines WP klappte es mit Deinem installiertem Plugin, dass Emojis gespeichert wurden.
Nach meinem WP-Update auf 4.9 (bzw. 4.9.1) nun leider nicht mehr.
Hi Peter,
das Plugin sollte eigentlich nur einmal kurz aktiviert werden müssen, um die Zeichensätze entsprechend anzupassen – danach sollte es nicht mehr notwendig sein und der Zeichensatz sollte sich bei einem Update eigentlich auch nicht wieder zurück auf utf8 umstellen (denke ich jedenfalls). Ist der Zeichensatz deiner Datenbank und der Tabellen wieder auf dem alten Stand?
Viele Grüße
Florian
Danke für den Artikel!
Frage: Würde WordPress nicht beim nächsten Update sowieso automatisch auf utf8mb4 umstellen, sobald der MySQL-Server dazu in der Lage ist?
Die Funktion
maybe_convert_table_to_utf8mb4
ist ja nach wie vor im Code derupgrade.php
enthalten: https://core.trac.wordpress.org/browser/tags/4.9/src/wp-admin/includes/upgrade.php#L1997Hi David,
das stimmt, aber schau mal in der Datei nach den Aufrufen der Funktion – da sind überall Bedingungen drin, damit das nur für ältere WP-Versionen gemacht wird.
Viele Grüße
Florian
Stimmt. Danke für den Hinweis!
Herzliche Grüße
David
Gerne 🙂