Ich gehe davon aus, dass jeder, der über einen längeren Zeitraum eine Webseite mit Datenbankanbindung betreut, dieses Problem schon einmal hatte. Nach dem Umzug einer Datenbank zeigt die Anwendung plötzlich seltsame Zeichen anstelle der Umlaute. Ich hatte diese Problem schon zig Mal und will es daher hier dokumentieren, in der Hoffnung, dass es mir und anderen einmal hilft.
Es gibt mehrere Methoden, eine Datenbank umzuziehen. Leider habe ich noch kein einfaches Verfahren gefunden, dass so arbeitet wie ich es gerne hätte.
Aus meiner Sicht, gibt es bei dem Umzug einer Datenbank zwei Probleme:
- Beim Einspielen der Daten über ein Webfrontend bekommt man einen Timeoutfehler.
- Nach dem Einspielen der Daten sind die Umlaute zerstört.
Problem Nr. 1 – Timeoutfehler
Diese Problem tritt auf, wenn man eine größere Datenbankdatei über ein Webfrontend hochladen will, denn diese haben in der Regel ein Größenlimit und zudem ein Zeitlimit. Wird einer der Werte überschritten, dann klappt der Import nicht.
Lösung:
- Man führt die Befehle direkt in der Befehlszeile des Servers durch.
- Man verwendet eine Software, die die Datenbankdatei in kleinen Stücken überträgt und einspielt, wie beispielsweise MySQLDumper
Problem Nr. 2 – Umlautfehler
Dieses Problem tritt häufig bei der Umstellung einer MySQL-Version auf eine andere auf, z.B. von Version 4 auf 5, da diese jeweils andere Standardzeichencodierungen verwenden. Ältere Versionen von MySQL 4 verwenden noch „Latin1“, wohingegen spätere Version und auch Version 5 „UTF-8“ einsetzen.
Es gibt mehrere Wege, eine Datenbank zu übertragen:
- Direkt auf dem Server über die Befehlseingabe
- Über eine Webanwendung zu Datenbankverwaltung, wie z.B. phpMyAdmin
- Über eine spezialisierte Webandwendung, wie z.B. MySQLDumper
Ich hatte unlängst wieder die Aufgabe, mehrere Datenbanken von MySQL 4 auf MySQL 5 zu übertragen. Manche lagen als „Latin1“ vor, andere bereits als „UTF-8“. Trotzdem hatte ich mit allen Wegen Probleme.
Datenübertragung über die Befehlseingabe
Der schnellste Weg, Datenbanken zu übertragen, führt über die Befehlseingabe direkt auf dem Server. Hier erstellt man einen SQL-Dump und spielt diesen auf dem gleichen oder einem anderen Server wieder ein. Nachteil ist, dass hierbei m.W. keine Datenkonvertierung durchgeführt werden kann.
Anleitung für goneo.de: wiki.goneo.de/ssh-mysqldump
Anleitung für 1&1: hilfe-center.1und1.de/datenbanken-c82637/mysql-c82650/bedienung-c82751/informationen-zur-mysql-4-abschaltung-a791820.html
Datenbankübertragung mit phpMyAdmin
phpMyAdmin ist eine Webanwendung, die auf vielen Hostingservern bereits vorinstalliert ist. Wenn nicht, kann man sich die Software im Internet herunterladen, entpacken und per FTP auf den Zielserver übertragen.
Sowohl der Export, als auch der Import einer Datenbank ist mit phpMyAdmin einfach durchzuführen. Nachteilig ist, dass es bei großen Datenbeständen zu Laufzweitfehlern kommt, da jede Webanwendung Größenlimit und/oder Zeitlimit hat. Hier hilft dann nur, die Datenbankdatei aufzuteilen und die Teilstücke einzeln einzuspielen. Das Verfahren ist dann u.U. recht mühlselig. Dafür klappte es aber bei mir am Besten damit.
Datenbankübertragung mit MySQLDumper
MySQLDumper ist eine Webanwendung, die man sich von mysqldumper.de herunterladen kann. Danach entpackt man sich die Dateien und kopiert das gesamte Verzeichnis per FTP auf den Zielserver.
Beim ersten Start fragt MySQLDumper nach den Zugangsdaten für die Datenbank. Die Bedienung der Software finde ich etwas sperrig. Besonders wenn man mit zwei Datenbanken arbeiten möchte, ist es nicht ganz einfach, die Stelle zu finden, an der man deren Werte einträgt. Letztlich ist es mir bei meinem aktuellen Fall auch nicht gelungen, die Daten so zu übertragen, dass die Umlaute intakt geblieben wären. Obwohl die Ausgangsdatei bereits „UTF-8“ kodiert war, waren die Umlaute in der neuen Datenbank defekt. Daher habe ich diese letztlich Stückweise mit phpMyAdmin übertragen.
Der Autor von MySQLDumper stellt ein umfangreiches Dokument zum Thema Umlautproblematik zur Verfügung, dass ich allerdings erst nach meinem Umzug gefunden habe:
http://forum.mysqldumper.de/die-umlautproblematik-was-wieso-was-tun-t2313.html
Wahrscheinlich kann man mit dieser Anleitung jede Datenbank mit MySQLDumper übertragen.
Weitere Quellen:
Ich habe vor einiger Zeit hier einen Beitrag zu MySQLDumper veröffentlicht.
Programmtechnische Umsetzung des Umlautproblems:
http://www.sebastianviereck.de/mysql-php-umlaute-sonderzeichen-utf8-iso/