PHP Skript zur Konvertierung einer MySQL Datenbank in UTF-8

Dieses Skript konvertiert mittels PHP eine ausgewählte MySQL-Datenbank in UTF-8. Sowohl der Zeichensatz der Datenbank, als auch der Tabellen, jeder einzelnen Spalte und der gesamte Datenbestand werden in UTF-8 umgeschrieben. Ich verwende dazu die PHP-MultiByteConvertString-Funktion, die es einem ermöglich zwischen einzelnen Zeichensätzen hin und her zu konvertieren. Unglaublich was so ein kleines Skript bereits bewirken kann.

Bei großen Datenbeständen ist dies mit bedacht einzusetzen, da es einen enormen Kraftakt für den Server und die Datenbank darstellt!

<?php
	header('Content-Type: text/html; charset=UTF-8');
	
	if (!function_exists('mb_convert_encoding')) {
		exit('Die Multibyte String Funktionalität ist nicht verfügabr. Siehe http://www.php.net/mbstring.');
	}
	
	exit('Vorsicht, dieses Skript durchkämmt die gesamte ausgewählte Datenbank und kovertiert sowohl die Tabellen, als auch die Spalten und den gesamten Dateninhalt in UTF-8! Dies ist eine Sicherung in Zeile 8. Sie muss auskommentiert werden, damit das Skript läuft und sollte gleich nach dem Gebrauch wieder aktiviert werden, da dies eine ENORME Datenbanklast erzeugt.');
	
	mysql_connect('localhost', 'user', 'password');
	mysql_select_db('database');
	$qryTables = mysql_query('SHOW TABLES');
	
	echo '<pre>';
	while ($tables = mysql_fetch_array($qryTables)) {
		$qryCols = mysql_query('SHOW COLUMNS FROM `'.$tables[0].'`');
 
		$sqlVals = '';
		$postSql = '';
		while ($cols = mysql_fetch_object($qryCols)) {
			mysql_query('ALTER TABLE `'.$tables[0].'` CHANGE `'.$cols->Field.'` `'.$cols->Field.'` '.$cols->Type.' CHARACTER SET utf8');
			print_r('ALTER TABLE `'.$tables[0].'` CHANGE `'.$cols->Field.'` `'.$cols->Field.'` '.$cols->Type.' CHARACTER SET utf8'.chr(10));
			$sqlVals .= $cols->Field.' = \\\'\'.mysql_escape_string(mb_convert_encoding($data->'.$cols->Field.', \'UTF-8\')).\'\\\', ';
			$postSql .= ' AND `'.$cols->Field.'` = \\\'\'.mysql_escape_string(mb_convert_encoding($data->'.$cols->Field.', \'UTF-8\')).\'\\\'';
		}
		$sqlVals = substr($sqlVals, 0, strlen($sqlVals)-2);
 
		$qryData = mysql_query('SELECT * FROM `'.$tables[0].'`');
		while ($data = mysql_fetch_object($qryData)) {
			eval('$sql = \''.$postSql.'\';');
			eval('$val = \''.$sqlVals.'\';');
			echo 'UPDATE `'.$tables[0].'` SET '.$val.' WHERE 0=0'.$sql.chr(10);
		}
 
		mysql_query('ALTER TABLE `'.$tables[0].'` DEFAULT CHARACTER SET utf8');
		print_r('ALTER TABLE `'.$tables[0].'` DEFAULT CHARACTER SET utf8'.chr(10).chr(10));
	}
	echo '</pre>';
?>