MySQL Datenbank auf UTF 8 umstellen

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
Benutzeravatar
HZB
Beiträge: 490
Registriert: 22.10.2003 11:52:15
Wohnort: Wien

MySQL Datenbank auf UTF 8 umstellen

Beitrag von HZB » 31.03.2009 14:39:32

Hallo !

Ich habe das schon öfters gelesen und auch selbst das Problem gehabt das eine bestehende Datenbank noch mit dem latin1 Zeichensatz codiert ist. Hier eine kleine Anleitung wie man die Datenbank auf UTF 8 umstellt.

Als Erstes einen Dump der Datenbank ziehen:

Code: Alles auswählen

mysqldump -u root -p --default-character-set=latin1 -c --insert-ignore --skip-set-charset DBNAME > DBDUMP.sql
Nach der Passworteingabe startet der Dump.

Danach ersetzt man den Zeichensatz direkt im SQL Dump:

Code: Alles auswählen

sed -r 's/latin1/utf8/g' DBDUMP.sql > DBDUMP_UTF8.sql
Als nächstes löscht man die alte Datenbank:
Erstmal ab in die Datenbank

Code: Alles auswählen

mysql -uroot -p
Passwort eingeben.

Jetzt wird die Datenbank gelöscht:

Code: Alles auswählen

mysql>drop database DBNAME;
Das Ergebnis sieht ungefähr so aus ( jenachdem wieviele Datenbanktabellen man hat ):

Code: Alles auswählen

Query OK, 47 rows affected (0.11 sec)
Danach erstellt man die Datenbank neu, jedoch mit dem neuen UTF 8 Zeichensatz:

Code: Alles auswählen

mysql>create database DBNAME CHARACTER SET utf8 COLLATE utf8_general_ci;
Wenn alles funktioniert hat sollte folgendes zu lesen sein:

Code: Alles auswählen

Query OK, 1 row affected (0.00 sec)
Danach kann man die MySQL Console verlassen:
Zu guter Letzt wird noch der MySQL Dump zurückgespielt:

Code: Alles auswählen

mysql -u root -p --default-character-set=utf8 DBNAME < DBDUMP_UTF8.sql
Fertig. Die Datenbank ist jetzt auf UFT 8 umgestellt.

HTH

Patrick

Benutzeravatar
KBDCALLS
Moderator
Beiträge: 22455
Registriert: 24.12.2003 21:26:55
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Re: MySQL Datenbank auf UTF 8 umstellen

Beitrag von KBDCALLS » 31.03.2009 23:09:36

verschoben

Eigentlich wäre es sinnvoller du würdest einen Wikieintrag draus machen.
Was haben Windows und ein Uboot gemeinsam?
Kaum macht man ein Fenster auf, gehen die Probleme los.

EDV ist die Abkürzung für: Ende der Vernunft

Bevor du einen Beitrag postest:
  • Kennst du unsere Verhaltensregeln
  • Lange Codezeilen/Logs gehören nach NoPaste, in Deinen Beitrag dann der passende Link dazu.

tex
Beiträge: 411
Registriert: 03.12.2005 00:32:40
Lizenz eigener Beiträge: GNU Free Documentation License
Kontaktdaten:

Re: MySQL Datenbank auf UTF 8 umstellen

Beitrag von tex » 31.03.2009 23:27:35

Wie wäre es einfach mit

Code: Alles auswählen

ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8;
?

Benutzeravatar
HZB
Beiträge: 490
Registriert: 22.10.2003 11:52:15
Wohnort: Wien

Re: MySQL Datenbank auf UTF 8 umstellen

Beitrag von HZB » 01.04.2009 15:55:21

KBDCALLS hat geschrieben:verschoben

Eigentlich wäre es sinnvoller du würdest einen Wikieintrag draus machen.
Dachte man sollte es erst in wiki Forum stellen ?
Werde den Eintrag aber ins Wiki stellen.

lG

Patrick

Benutzeravatar
HZB
Beiträge: 490
Registriert: 22.10.2003 11:52:15
Wohnort: Wien

Re: MySQL Datenbank auf UTF 8 umstellen

Beitrag von HZB » 01.04.2009 15:58:46

tex hat geschrieben:Wie wäre es einfach mit

Code: Alles auswählen

ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8;
?
Natürlich funktioniert das auch. Man müsste halt jede Tabelle einzeln abarbeiten oder ein Script basteln, welches die Tabellen ausliest und dann automatisch konvertiert. Ich wollte nur eine quick and dirty Lösung für faule Admins wie mich anbieten ;-)

lG

Patrick

laotse
Beiträge: 35
Registriert: 01.03.2009 02:08:58

Re: MySQL Datenbank auf UTF 8 umstellen

Beitrag von laotse » 11.04.2009 22:41:00

So geht's pro Datenbank, und wenn man will, packt man das noch in eine for-Schleife - allerdings sollte man sich dann etwas mit dem Passwort einfallen lassen.

Code: Alles auswählen

echo "show tables;" | mysql -u root -p -- mydatabase | sed 's/^\(.*\)$/ALTER TABLE \1 CONVERT TO CHARACTER SET utf8;/' | mysql -u root -p -- mydatabase
Grüße,
- lars.

Antworten