Hol dir Firefox 3 für ein besseres und moderneres Surf-Erlebnis! Dann siehst du uns auch mit runden Ecken ;-)

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!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
    // EaStErDoM rulz
    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 9. 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', 'benutzer', 'passwort');
    mysql_select_db('datenbank');
    $qryTables = mysql_query('SHOW TABLES');
 
echo '<pre>';
    while ($tables = mysql_fetch_object($qryTables)) {
        $qryCols = mysql_query('SHOW COLUMNS FROM `'.$tables->Tables_in_alg.'`');
 
        $sqlVals = '';
        $postSql = '';
        while ($cols = mysql_fetch_object($qryCols)) {
            mysql_query('ALTER TABLE `'.$tables->Tables_in_alg.'` CHANGE `'.$cols->Field.'` `'.$cols->Field.'` '.$cols->Type.' CHARACTER SET utf8');
            print_r('ALTER TABLE `'.$tables->Tables_in_alg.'` 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->Tables_in_alg.'`');
        while ($data = mysql_fetch_object($qryData)) {
            eval('$sql = \''.$postSql.'\';');
            eval('$val = \''.$sqlVals.'\';');
            echo 'UPDATE `'.$tables->Tables_in_alg.'` SET '.$val.' WHERE 0=0'.$sql.chr(10);
        }
 
        mysql_query('ALTER TABLE `'.$tables->Tables_in_alg.'` DEFAULT CHARACTER SET utf8');
        print_r('ALTER TABLE `'.$tables->Tables_in_alg.'` DEFAULT CHARACTER SET utf8'.chr(10).chr(10));
    }
echo '</pre>';
?>
Quelltext: PHP
Erstellt von EaStErDoM am 29.05.2007 um 15:50:59.
Zuletzt bearbeitet von EaStErDoM am 29.05.2007 um 15:50:59.
Schlagworte: PHP, MySQL

Kommentare

unkie, am 29.05.2007 um 19:05:16
netter script :D aber wie wäre es mit ein paar erklärungen, was was macht ;)
EaStErDoM, am 30.05.2007 um 09:48:58
War nicht als Tutorial gedacht, nur als Codeschnipsel.
unkie, am 31.05.2007 um 19:07:54
ok, dann ist ja alles geklärt :D
EaStErDoM, am 05.09.2007 um 17:00:03
Kack, die Rückstriche wurden aus dem Skript genommen, das nervt mich echt.