UTF-8

Dienstag, 27. März 2007
Ich habe heute den ganzen Tag versucht diesen Blog in UTF-8 zu konvertieren. Wenn also zwischendurch etwas zerschossen war, oder der Server etwas gelahmt hat, dann lag es wahrscheinlich daran.

Das Problem war, wie kriegt man die Daten in der Datenbank nach UTF-8 konvertiert. Meine Versuche das direkt über MySQL zu machen, sind leider alle komplett gescheitert. Ich habe mich daher dazu entschlossen, die Daten mit einem kleinen PHP-Script auf der Konsole zu konvertieren.

Raus gekommen ist dabei folgendes Script. Das Script ließt alle Tabellen aus einer Datenbank und ließt diese dann komplett aus, kovertiert sie und speichert sie in einer neuen Datenbank. Dabei erwartet das Script bereits alle Tabellen in der neuen Datenbank. Auch nimmt das Script keine Rücksicht auf die Daten. Schauen wir also mal, ob das Blog funktioniert, und wie lange...

convert.php:
<?php

// Einstellungen
$db_name     = 'localhost';
$db_login    = 'ridcully';
$db_password = '';
$db_source = 'ridcully';
$db_target = 'ridcully_new';

// DB verbinden
$db = mysql_connect($db_name, $db_login, $db_password);

// Tabellen von Source laden
$res = mysql_query('SHOW TABLES FROM ' . $db_source);
$tables = array();
while ($ret = mysql_fetch_array($res)) $tables [] = $ret[0];

// Tabellen aus Source lesen, in UTF8 umwandeln und in Target speichern
foreach($tables as $table) {
	echo "Tabelle: $table\n";
	$res = mysql_query($q = 'SELECT * FROM ' . $db_source . '.' . $table, $db);
	while ($ret = mysql_fetch_array($res)) {
		$q = 'INSERT INTO ' . $db_target . '.' . $table . ' VALUES (';
		foreach ($ret as $key => $value) {
			if (is_numeric($key))
				continue;
			$q .= '\'' . mysql_escape_string(utf8_encode($value)) . '\', ';
			}
		$q = substr($q, 0, strlen($q) - 2) . ');';
		mysql_query($q);
	}
}

?>
Das Script kommt ohne Garantie und ohne wirklich getestet zu sein. Entweder es funktioniert, oder man verliert seine Daten. Einsatz also auf eigene Gefahr!

links for 2007-03-26

Dienstag, 27. März 2007