Folgendes PHP-Skript konvertiert eine komplette MySQL Datenbank in UTF-8:
View Code PHP
define('DB_HOST', 'localhost'); define('DB_NAME', 'datenbank_name'); define('DB_USER', 'benutzer'); define('DB_PASSWD', 'supergeheimespasswort'); mysql_connect(DB_HOST, DB_USER, DB_PASSWD); mysql_select_db(DB_NAME); $result = mysql_query("SHOW TABLES"); while($row = mysql_fetch_assoc($result)) { $tableName = $row['Tables_in_'.DB_NAME]; $fields = array(); $primaryKey = null; mysql_query("ALTER TABLE `{$tableName}` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci"); $_result = mysql_query("DESCRIBE `{$tableName}`"); while($_row = mysql_fetch_assoc($_result)) { if(isset($_row['Key']) && $_row['Key'] == 'PRI' && !$primaryKey) { $primaryKey = $_row['Field']; } if(strpos($_row['Type'], 'varchar') !== false || strpos($_row['Type'], 'text') !== false) { $fields[] = $_row['Field']; mysql_query("ALTER TABLE `{$tableName}` CHANGE `{$_row['Field']}` `{$_row['Field']}` {$_row['Type']} CHARACTER SET utf8 COLLATE utf8_general_ci"); } } if(!empty($fields) && !empty($primaryKey)) { $fields[] = $primaryKey; $_result = mysql_query("SELECT `".implode('`,`', $fields)."` FROM `{$tableName}`"); while($_row = mysql_fetch_assoc($_result)) { $values = array(); foreach($_row as $field => &$value) { if($field != $primaryKey && !empty($value)) { $values[] = "`".$field."` = '".utf8_encode($value)."'"; } } $sql = "UPDATE `{$tableName}` SET ".implode(',', $values)." WHERE `{$primaryKey}` = '{$_row[$primaryKey]}'"; mysql_query($sql); } } } |
Es werden nicht nur die Tabellen selbst, sondern auch alle geeigneten Felder konvertiert.
UPDATE 31.03.2011:
Ich habe das Skript noch einmal erweitert, sodass nicht nur die Datenbank konvertiert wird, sondern auch die Inhalte alle Datensätze.
GENIAL! Habe schon ein andres Script gefunden, welches mir aber die Inhalte vor Umlaut weggeschnitten hat, aber deins hier funktioniert perfekt!
Dank dir 😉
Hey, danke für das Script – Funktioniert super! Nur leider gibt’s eine Zeitüberschreitung wegen PHP, max. 30 Sekunden 😛
Wie kann ich das umgehen?
Bei mir versägt das Script die Umlaute in der Datenbank.
Ich habe das hier gefunden:
http://www.schnatterente.net/webdesign/php-mysql-utf8
Wenn man das von Anfang beachtet, hat man weniger Probleme!
Vielen Dank für dieses Script!!!
Hat bei mir prima funktioniert und mir eine Menge Arbeit erspart 😀