Als erstes wird ein Dump der Datenbank erstellt.

1
mysqldump --opt -Q -u{DB_USER} -p{PASSWORT} -hlocalhost {DB_NAME} | sed s'/DEFAULT CHARSET=.*;/DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;/g' > mysql_dump.sql

Bitte die Platzhalter {DB_USER}, {PASSWORT} und {DB_NAME} gegen die dementsprechenden Werte ersetzen, sonst wird das nichts !!

Damit wird die Datenbank gesichert – man sollte sich hiervon eine Kopie erstellen – und gleichzeitig alle Definitionen von „latin1“ auf „UTF-8“ geändert.

Nun sollte man heraus finden, in welchem „Format“ das Dump vorliegt. Also, ob die Datei selbst schon UTF-8 ist, oder nicht. Daraus entscheidet sich, ob diese noch konvertiert werden muss.

1
file -i mysql_dump.sql

Mögliche Ausgabe:

1
mysql_dump.sql: text/x-c charset=utf-8

In diesem Beispiel haben wir bereits UTF-8 vorliegen und der nächste Schritt ist nicht von Nöten. Sollte die Datei noch NICHT in UTF-8 vorliegen, wird diese nun konvertiert.

1
iconv -f {CHARSET} -t utf8 mysql_dump.sql > mysql_dump.utf8.sql
Bitte {CHARSET} mit dem Zeichensatz ersetzen, in dem die Datei vorliegt !!

Nun spielt man die Datenbank zurück. Dabei wird die Option „–default-character-set=utf8“ genutzt, um auf der sicheren Seite zu sein.

1
mysql -u{DB_USER} -p{PASSWORT} -hlocalhost --default-character-set=utf8 {DB_NAME} < mysql_dump.sql (oder mysql_dump.utf8.sql)

Und wenn man alles richtig gemacht hat, hat man nun eine UTF-8 Datenbank. Als letztes sollte man noch prüfen ob alle Umlaute richtig dargestellt werden.

9 Meinungen zu “MySQL Datenbank in UTF-8 konvertieren

  1. Das ist meiner Meunung nach die einfachste Beschreibung eine Datenbank nach utf-8 zu konvertiren. Hat ohne die geringsten Probleme in 10 Minuten geklappt.

    Vielen Dank

  2. Also ich muss sagen: Wirklich einsame Klasse!

    Habe 100 Seiten durchsucht nach eine guten Lösung für mein Problem meine MySQL DB zu konverntieren (TYPO3). Zich male musste ich meine Backups zurückspielen weil nichts geklappt hat – auch diverse PHP Scripte habe ich getetst dafür.

    Fazit alles war totaler Schrott bis ich hier auf die Seite gestoßen bin:

    Funktioniert wirklich in ein paar Minuten, super easy! Thanx!

  3. Das geht wunderbar, aber was macht man wenn die Datenbank unter latin1_general_ci bereit komische Zeichen für Umlaute enthält:
    ü für ü etc…

  4. Das ist „normal“. Eigentlich kanns Dir doch egal sein, wie die Datenbank das intern speichert. Nur dann, wenn die Ausgabe auf der Webseite trotz des eingestellten Zeichensatzes UTF8 (APACHE -Config und Zeichensatz im HTML!!!) „verleiert“ aussieht, mußt Du Dir Sorgen machen.

    Also schau nach: Arbeitet der Apache mit UTF8 und
    Ist der Zeichensatz der ausgegebenen Webseite auch UTF8 (HTML-Tag prüfen !)

    • Ganz so egal ist das eben nicht und man solte schon drauf achten, dass sowohl Webseite als auch datenbank den selben zeichensatz verwenden. Gerade wenn es um Formulare geht, welche mit Inhalten aus der DB befüllt werden. So zum Beispiel beim Ändern eines Datensatzes. Wenn die DB in diesem Falle nun Latin-1 ist, und der Datensatz selbst eigentlich Unicode, wie auch die Seite, wird er nicht vernünftig in das Formular eingesetzt, da hier einfach ein Konflikt zwischen den Zeichensätzen vorliegt. Dies betrifft besonders Umlaute und Sonderzeichen. Ergo, nicht egal.

Schreibe einen Kommentar

Ihre Email-Adresse wird nicht veröffentlicht. Pflichtfelder sind durch * markiert.

Sie können folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>