Anzeige
Anzeige
UX & Design
Artikel merken

Tipps zum Wechsel von Latin1 auf UTF-8: MySQL und TYPO3 auf UTF-8 umstellen

Mehrsprachige Websites erfordern einen gemeinsamen Zeichensatz für alle Sprachen. Schon zu Zeiten von MySQL 4.0 haben einige TYPO3-Entwickler versucht, UTF-8-kodierte Zeichen in der Datenbank zu speichern, obwohl diese UTF-8 noch gar nicht kannte. Jetzt, da MySQL 4.1 und 5 bei vielen Hostern angeboten wird, kann man die Daten standardkonform speichern. Oft gibt es aber Probleme bei der Umstellung. Dieser Artikel hilft sowohl beim Anlegen einer neuen Installation als auch beim Umstieg.

7 Min. Lesezeit
Anzeige
Anzeige

Die große Zahl unterschiedlicher Zeichensätze stammt aus einer Zeit, in der Speicher ein äußerst knappes Gut war. So besaß jeder Zeichensatz nur eine überschaubare Anzahl an Zeichen. Wollte man nun den Zeichensatz einer Website zum Beispiel von Deutsch nach Arabisch wechseln, musste man von „ISO 8859-1“ nach „ar-win1256“ umschalten. Diese Umstellung konnte aber nur für eine komplette Website gemacht werden. Innerhalb einer Seite oder innerhalb eines XML-Dokuments war dies nicht möglich. Es musste also ein gemeinsamer Zeichensatz für alle Sprachen geschaffen werden. Die Lösung heißt Unicode, wobei sich der Zeichensatz UTF-8 durchgesetzt hat. Dabei stehen bis zu 4 Byte für die Kodierung eines Zeichens zur Verfügung. Die Anzahl an möglichen unterschiedlichen Zeichen wuchs dadurch von 128 Zeichen bei 7 Bit oder 256 bei 8 Bit auf über eine Millionen an.

„Frisches“ TYPO3 mit UTF-8-Datenbank

Anzeige
Anzeige

Sofern Sie MySQL in der Version 4.1 oder 5.x einsetzen, können Sie eine aktuelle TYPO3-Version mit UTF-8 verwenden. Leider wird UTF-8 von TYPO3 noch nicht standardmäßig aktiviert. Zunächst müssen Sie TYPO3 daher mit einer UTF-8 Datenbank aufsetzen. Meist hat man bei einem Hoster schon ein fertiges TYPO3 ohne UTF-8-Unterstützung installiert. Die Datenbank zu konvertieren würde länger dauern, als sie neu zu erstellen. Dabei kommt es aber auf die richtige Reihenfolge an.

Installieren Sie zunächst die Extension „phpmyadmin“ [1]. Klicken Sie anschließend auf den Menüpunkt „phpmyadmin“ und dann direkt auf „Operationen“. Wählen Sie nun bei Kollation „utf8_general_ci“ aus. „utf8_unicode_ci“ ist zwar genauer, aber langsamer und unterscheidet sich im Deutschen nur bei SELECT-Abfragen, bei denen im Datensatz ein „ß“ vorkommt. Hier würde im einen Fall nach einem einfachen, im anderen Fall nach einem doppelten „s“ sortiert.

Anzeige
Anzeige

Durch Klick auf den Datenbanknamen über der Tabellenauflistung kommen Sie zur Ansicht der Tabellenstrukturen. Markieren Sie nun alle Tabellen mit „Alle markieren“ und wählen aus der Drop-Down-Box unten „markierte: => Löschen“ aus. Nach einer Sicherheitsabfrage werden die Tabellen endgültig gelöscht. Die Datenbank mit der voreingestellten Kollation ist anschließend aber immer noch vorhanden.

Anzeige
Anzeige

Klicken Sie nun auf den Menüpunkt Installation oder öffnen Sie das Install-Tool über eine URL in der Form „http://www.domain.tld/typo3/install/“. Unter „All Configuration“ muss nun „[forceCharset]“ auf „utf-8“ und „[setDBinit]“ den Eintrag „SET NAMES utf8;“ erhalten. Der zusätzliche Eintrag „SET CHARACTER_SET utf8;“, der dem Feld „[setDBinit]“ hinzugefügt werden kann, ist oft nicht notwendig. Weitere Informationen zu diesem
Thema liefert [2]. Sollten bei den späteren Tests Probleme auftauchen, kann dieser Eintrag noch versuchsweise hinzugefügt werden. Sie müssen im TypoScript übrigens „metaCharset“ und „renderCharset“ nicht setzen, da „forceCharset“ diese beiden Werte automatisch setzt. Mit „SET NAMES utf8;" wird MySQL darüber informiert, in welchem Zeichensatz die Daten übermittelt werden.

Jetzt kann die Datenbank unter dem Menüpunkt „Database Analyser“ wieder neu angelegt werden. Mit einem Klick auf „Compare“ und „Write to database“ wird die Datenbankstruktur neu angelegt. Die statischen Daten werden über „Import“ und Klick auf „Import the whole file ‚CURRENT_STATIC‘ directly (ignores selections above)“ hinzugefügt. Nun fehlt nur noch der Admin-User, den Sie sich jetzt anlegen können.

Anzeige
Anzeige

Falls der Server UTF-8 im Dateisystem verwenden kann, ist es möglich, einen Haken bei „[UTF8filesystem]“ zu setzen. Diese Konfiguration hat aber nichts mit der Datenbank-Umstellung zu tun und ist abhängig von den locale-Einstellungen des Servers. In der Datei „php.ini“ sollte sicherheitshalber auch „default_charset“ auf UTF-8 gesetzt werden, damit alle PHP-Skripte ohne explizite Angabe den richtigen Zeichensatz verwenden.

Damit ist die Umstellung fertig, aber Sie sollten jetzt noch einen Test machen. Loggen Sie sich dazu im TYPO3-Backend ein und ändern den Namen des Admins, zum Beispiel auf Müller. Dieser sollte sowohl im Backend als auch in phpMyAdmin mit einem „ü“ angezeigt werden. Wird irgendwo das „ü“ als „ü“ angezeigt, haben Sie vermutlich einen Schreibfehler im Install-Tool gemacht.

Umstellung einer vorhandenen Datenbank

Sollten Sie bisher noch keine fehlgeschlagenen Versuche gemacht haben, dann ist dies gar nicht so schwierig. Wichtig ist hier vor allem wieder die richtige Reihenfolge, damit nicht später zwei verschiedene Zeichensätze in der Datenbank sind. Dann wäre nämlich keine fehlerfreie Umwandlung eines Datenbank-Dumps mehr möglich. Als erstes müssen Sie, wie auch beim Neuanlegen beschrieben, mit phpMyAdmin die Kollation der Datenbank auf „utf8_general_ci“ umstellen. Auch hier muss TYPO3 umgestellt werden, aber auf jeden Fall erst, nachdem der Datenbank-Dump erstellt wurde: Bei MySQL 4.0 kann ein Dump mit der folgenden Zeile erstellt werden (USER, PASSWORT HOST und DB müssen durch die echten Daten ersetzt werden):

Anzeige
Anzeige
SHELL
mysqldump --opt -Q -u USER -p PASSWORT -h HOST DB > dump.sql

Listing 1

Sollte die auf dem Zeichensatz „latin1“ basierende Datenbank in MySQL-Version 4.1 oder einer aktuelleren Version gespeichert sein und nur einen Zeichensatz verwenden, kann man den Dump mit dem zusätzlichen Parameter „–compatible=mysql40“ ohne Ausgabe der Kollation (wird für die Sortierung benötigt) erstellen. Sofern man den Kompatibilitätsmodus nicht einsetzt, muss man im Dump noch Charset und die Kollation anpassen. Aus der Zeile „ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;“ würde dann beispielsweise „ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_gene-ral_ci;“ werden.

Nun folgt die Konvertierung des Dumps nach UTF-8. Bitte kopieren Sie sich sicherheitshalber den Dump als Backup an eine sichere Stelle, falls bei irgendwelchen Versuchen etwas fehlschlagen sollte. Auf der Linux-Shell muss nun folgendes eingegeben werden:

SHELL
iconv -f iso-8859-1 -t utf8 dump.sql > dump-iconv.sql

Listing 2

Wenn Sie einen anderen Zeichensatz als „ISO 8859-1“ verwendet haben, dann müssen Sie die Angabe hinter dem „-f“ noch anpassen. Der erstellte Dump sollte nun UTF-8-kodiert vorliegen und Sie können diesen schon bald zurücksichern. Doch bevor Sie dies tun, müssen erst die Einträge im Install-Tool von TYPO3 gemacht werden, die auch schon vorher bei der Neuinstallation beschrieben wurden. Sie können dazu das Install-Tool benutzen oder aber auch im Ordner „typo3conf“ die Datei „localconf.php“ um folgende zwei Zeilen ergänzen und anschließend die „temp_CACHED_*“-Dateien löschen:

Anzeige
Anzeige
SHELL
$TYPO3_CONF_VARS['SYS']['setDBinit'] = 'SET NAMES utf8;';
$TYPO3_CONF_VARS['BE']['forceCharset'] = 'utf-8';

Listing 3

TYPO3 verwendet jetzt schon für die Datenbankverbindung und die Ausgabe im Frontend und Backend UTF-8. Da Sie erst jetzt unseren umgewandelten Dump zurückspielen, kann es nicht passieren, dass versehentlich zwei verschiedene Zeichensätze in der Datenbank vorhanden sind (z. B. durch einen Datenbank-Eintrag in den Seitencache, der von einem Besucher der Website erzeugt wurde). Mit der folgenden Zeile wird die Datenbank zurückgesichert:

SHELL
mysql -u USER -p PASSWORT -h HOST --default-character-set=utf8 DB < dump-iconv.sql

Listing 4

Mit dem „–default-character-set=UTF8“ wird MySQL mitgeteilt, dass die Daten schon im UTF-8 Format vorliegen. Ohne diese Angabe würde aus „üöä“ „üöä“. Sie sollten nun prüfen, ob alles geklappt hat, indem Sie im Frontend, im Backend sowie mit phpMyAdmin die Umlaute prüfen. Zusätzlich können Sie auch mit dem MySQL-Query-Browser [3] prüfen, ob alles ordnungsgemäß angezeigt wird.

Was tun bei falsch codierten Zeichen?

Wenn bei einer MySQL-4.0-Datenbank im Install-Tool „forceCharset“ auf „utf-8“ gesetzt wurde, übermittelt TYPO3 die Zeichen utf-8-kodiert an die Datenbank. MySQL 4 kann damit allerdings nichts anfangen und speichert diese so, dass weder Suche noch Sortierung innerhalb von MySQL funktionieren. Wenn ein Dump von dieser MySQL-4.0-Datenbank gemacht wird, sind diese Daten schon UTF-8-kodiert und müssen nur noch in eine MySQL-4.1- oder 5.0-Datenbank importiert werden. Der benötigte Befehl ist in Listing 4 zu sehen. Es kommt auch hier wieder vor allem auf die Angabe „–default-character-set=UTF8“ an. Die Kollation der Datenbank muss vor dem Einspielen des Dumps ebenfalls auf „utf8_general_ci“ gesetzt werden. Da TYPO3 in alten Versionen Probleme mit aktuelleren MySQL-Versionen hatte, wird man dies sinnvollerweise nur bei einem Update auf eine neue TYPO3-Version machen. Erst diese bietet die notwendige Einstellung „SET NAMES utf8;“.

Anzeige
Anzeige

Und hiermit wären wir beim nächsten Problem: In alten TYPO3-Versionen gab es die Einstellung „[setDBinit]“ noch nicht und somit konnte „SET NAMES utf8;“ in älteren TYPO3-Versionen ohne Sourcecode-Änderung gar nicht durchgeführt werden. Selbst wenn man eine UTF-8-taugliche Datenbank verwendet hätte, wären falsch kodierte Zeichen die Folge. TYPO3 sendet in diesem Fall UTF-8-kodierte Zeichen zur Datenbank. Diese geht davon aus, es kämen Latin1-kodierte Zeichen und wandelt alle Umlaute erneut um. Somit hätte man nun doppelt kodierte Umlaute. In diesem Fall kann man aber einen Dump mit „iconv“ reparieren, indem man eine Wandlung von UTF nach Latin1 auf der Konsole vornimmt:

SHELL
iconv -f utf8 -t iso-8859-1 dump.sql > dump-iconv.sql

Listing 5

Wichtige Hinweise

Machen Sie ein Backup und löschen Sie dies erst, wenn Sie absolut sicher sind, dass die Umstellung erfolgreich war. Die Einstellung „[multiplyDBfieldSize]“ sollte auf „1“ stehen bleiben. MySQL 4.1 und 5.x benötigen hier keine Änderung. Prüfen Sie außerdem, ob die Version von „mysqldump“ zur MySQL-Server-Version passt. Im schlimmsten Fall können Sie nicht einmal einen Dump erzeugen. Verzichten sollten Sie auf den Einsatz der Extension „convert2utf8“. Diese wandelt nicht alle Datensätze um, wodurch „iconv“ (oder auch alternativ recode) den Dump nicht mehr ohne Fehlermeldungen konvertieren. Eine Umwandlung lässt sich zwar erzwingen, aber ohne 100-prozentige Sicherheit, dass alles geklappt hat.

Mehr zu diesem Thema
Fast fertig!

Bitte klicke auf den Link in der Bestätigungsmail, um deine Anmeldung abzuschließen.

Du willst noch weitere Infos zum Newsletter? Jetzt mehr erfahren

Anzeige
Anzeige
4 Kommentare
Bitte beachte unsere Community-Richtlinien

Wir freuen uns über kontroverse Diskussionen, die gerne auch mal hitzig geführt werden dürfen. Beleidigende, grob anstößige, rassistische und strafrechtlich relevante Äußerungen und Beiträge tolerieren wir nicht. Bitte achte darauf, dass du keine Texte veröffentlichst, für die du keine ausdrückliche Erlaubnis des Urhebers hast. Ebenfalls nicht erlaubt ist der Missbrauch der Webangebote unter t3n.de als Werbeplattform. Die Nennung von Produktnamen, Herstellern, Dienstleistern und Websites ist nur dann zulässig, wenn damit nicht vorrangig der Zweck der Werbung verfolgt wird. Wir behalten uns vor, Beiträge, die diese Regeln verletzen, zu löschen und Accounts zeitweilig oder auf Dauer zu sperren.

Trotz all dieser notwendigen Regeln: Diskutiere kontrovers, sage anderen deine Meinung, trage mit weiterführenden Informationen zum Wissensaustausch bei, aber bleibe dabei fair und respektiere die Meinung anderer. Wir wünschen Dir viel Spaß mit den Webangeboten von t3n und freuen uns auf spannende Beiträge.

Dein t3n-Team

Urs Bräm

Toller Artikel! Hat mir extrem geholfen. Danke.

Allerdings habe ich wiederholt festgestellt, dass Halbgeviertstriche und einfache (typographische) Anführungszeichen nicht sauber konvertiert werden. Auf Windows 7 sind sie ganz verschwunden, mit IE 6 auf XP sind sie Kästchen sichtbar. Ob das an iconv liegt?

Antworten
xtine7

Nur um sicherzugehen:
Wie werden Umlaute in phpMyAdmin angezeigt, wenn alles korrekt funktioniert:
„üöä“ oder „üöä“?

Antworten
ursbraem

@xtine7 Eigentlich ersteres. Aber as kann von phpMyadmin abhängen, bei uns zeigt es die Umlaute falsch an, obwohl alles richtig läuft (weil wahrscheinlich in PMA charset falsch gesetzt ist, ist ja auch nur eine webapp)

Antworten
xtine7

Danke, gut zu wissen.
Habe nämlich zwei TYPO3-Installationen, beide auf UTF-8, beide zeigen Sonderzeichen korrekt an und verwende dieselbe Version der phpMyAdmin-Extension. Nur werden die Sonderzeichen eben einmal so „üöä“ und einmal so „üöä“ im PMA angezeigt.
Vielleicht liegt’s dann ja auch an der Serverkonfiguration.

Antworten

Melde dich mit deinem t3n Account an oder fülle die unteren Felder aus.

Bitte schalte deinen Adblocker für t3n.de aus!
Hallo und herzlich willkommen bei t3n!

Bitte schalte deinen Adblocker für t3n.de aus, um diesen Artikel zu lesen.

Wir sind ein unabhängiger Publisher mit einem Team von mehr als 75 fantastischen Menschen, aber ohne riesigen Konzern im Rücken. Banner und ähnliche Werbemittel sind für unsere Finanzierung sehr wichtig.

Schon jetzt und im Namen der gesamten t3n-Crew: vielen Dank für deine Unterstützung! 🙌

Deine t3n-Crew

Anleitung zur Deaktivierung
Artikel merken

Bitte melde dich an, um diesen Artikel in deiner persönlichen Merkliste auf t3n zu speichern.

Jetzt registrieren und merken

Du hast schon einen t3n-Account? Hier anmelden

oder
Auf Mastodon teilen

Gib die URL deiner Mastodon-Instanz ein, um den Artikel zu teilen.

Anzeige
Anzeige