MySQL: Datenbank zu UTF8 Kollation konventieren

Juli 26, 2006  |  Allgemein

Beim Ex- und Import von der MySql Datenbank im Büro auf den Laptop kam es in letzter Zeit immer wieder zu Problemen mit den Umlauten. Bei Präsentationen natürlich alles andere als gut deswegen musste ich mich nach einer Lösung umsehen.
Das Problem ist die Mysql Standard Collation ‘latin1′ und nicht ‘utf8′ (utf8_general_ci ist wohl für die meisten Sprachen die beste Wahl).
Um dies zu verändern, entweder den MySql-Server immer mit

shell>mysqld --default-character-set=utf8 --default-collation=utf8_general_ci

starten, oder MySql gleich mit den ‘richtigem’ Charset und Collation kompilieren:

shell>./configure --with-charset=utf8 --with-collation=utf8_general_ci

Alternativ und für Windows die beste Lösung, kann auch die my.cnf wie folgt angepasst werden:

default-character-set=utf8
default-collation=utf8_general_ci

Um bereits existierende Tabellen mit PHP nach UTF8 zu konventieren, hilft dieser kleine Code-Snippet

$dbname = 'my_databaseName';
mysql_connect('127.0.0.1', 'root', '');
mysql_query("ALTER DATABASE `$dbname` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci");
$res = mysql_query("SHOW TABLES FROM `$dbname`");
while($row = mysql_fetch_row($res)) {
   $query = "ALTER TABLE {$dbname}.`{$row[0]}` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci";
   mysql_query($query);
   $query = "ALTER TABLE {$dbname}.`{$row[0]}` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci";
   mysql_query($query);
}
echo 'all tables converted';

Um in Zukunft sicher zu gehen, dass Inhalte die in die Datenbank geschrieben werden auch Zeichenkonform konventiert werden, ist es ratsam nach dem connect bzw. select_db den richtigen Zeichensatz zu setzen:

mysql_query("SET NAMES 'utf8'");

Leave a Reply

You must be logged in to post a comment.