Johnnii360
Erfahrenes Mitglied
Servus zusammen!
Ich hab da mal eine Frage und brauche Eure Hilfe. Irgenwie blick ich da nicht durch.
Und zwar habe ich gestern meine komplette Tabelle von latin1_swedish_ci in binär mit einem Script umgewandelt, um alles in UTF8-Codierung zu haben.
Hier das Script:
Das Script sollte in Binär und dann wieder ins ursprüngliche Format zurückwandeln. Leider gab es aber irgendwie einen Fehler und er hat nicht mehr ins Ursprungformat zurückgewandelt.
Jetzt haben alle Tabellen die Kollation binary, CHAR ist nun BINARY, VARCHAR VARBINARY und TEXT BLOB.
Ich möchte aber alle Tabellen wieder in utf8_unicode_ci und den Datentyp der Felder wie folgt konvertieren:
Ich würde mich über eine schnelle Hilfe und ein Script sehr freuen.
Vielen Dank im Voraus!
Ich hab da mal eine Frage und brauche Eure Hilfe. Irgenwie blick ich da nicht durch.
Und zwar habe ich gestern meine komplette Tabelle von latin1_swedish_ci in binär mit einem Script umgewandelt, um alles in UTF8-Codierung zu haben.
Hier das Script:
PHP:
$DB_HOST = 'localhost'; // Enter your Database Host
$DB_USER = 'username'; // Enter your Database Username
$DB_PASSWORD = 'password'; // Enter your Database Password
$DB_DATABASE = 'database'; // Enter your Database Name
$tables = array();
$tables_with_fields = array();
$link_id = mysql_connect($DB_HOST, $DB_USER, $DB_PASSWORD) or die('Error establishing a database connection');
echo 'Connected' ."\n";
mysql_select_db($DB_DATABASE, $link_id);
echo 'Selected database' ."\n";
// Gathering information about tables and all the text/string fields that can be affected
// during the conversion to UTF-8.
echo 'Getting tables:' ."\n";
$resource = mysql_query("SHOW TABLES", $link_id);
while ( $result = mysql_fetch_row($resource) ) {
$tables[] = $result[0];
echo ' - ' . $result[0] ."\n";
}
if ( !empty($tables) ) {
echo 'Starting process' ."\n";
foreach ( (array) $tables as $table ) {
echo 'Working on table "' . $table . '"';
$resource = mysql_query("EXPLAIN $table", $link_id);
while ( $result = mysql_fetch_assoc($resource) ) {
if ( preg_match('/(char)|(text)|(enum)|(set)/', $result['Type']) )
$tables_with_fields[$table][$result['Field']] = $result['Type'] . " " . ( "YES" == $result['Null'] ? "" : "NOT " ) . "NULL " . ( !is_null($result['Default']) ? "DEFAULT '". $result['Default'] ."'" : "" );
echo '.';
}
echo "\n";
}
// Change all text/string fields of the tables to their corresponding binary text/string representations.
echo 'Altering tables to binary character set';
foreach ( (array) $tables as $table ) {
mysql_query("ALTER TABLE $table CONVERT TO CHARACTER SET binary", $link_id);
echo '.';
}
echo "\n";
// Change database and tables to UTF-8 Character set.
echo 'Altering tables to utf8 character set';
mysql_query("ALTER DATABASE " . $DB_DATABASE . " CHARACTER SET utf8", $link_id);
foreach ( (array) $tables as $table ) {
mysql_query("ALTER TABLE $table CONVERT TO CHARACTER SET utf8", $link_id);
echo '.';
}
echo "\n";
// Return all binary text/string fields previously changed to their original representations.
echo 'Altering binary text/string fields to original representation';
foreach ( (array) $tables_with_fields as $table => $fields ) {
foreach ( (array) $fields as $field_type => $field_options ) {
mysql_query("ALTER TABLE $table MODIFY $field_type $field_options", $link_id);
}
echo '.';
}
echo "\n";
// Optimize tables and finally close the mysql link.
echo 'Optimizing tables' . "\n";
foreach ( (array) $tables as $table )
mysql_query("OPTIMIZE TABLE $table", $link_id);
mysql_close($link_id);
echo 'DONE';
} else {
die('There are no tables?');
}
Das Script sollte in Binär und dann wieder ins ursprüngliche Format zurückwandeln. Leider gab es aber irgendwie einen Fehler und er hat nicht mehr ins Ursprungformat zurückgewandelt.
Jetzt haben alle Tabellen die Kollation binary, CHAR ist nun BINARY, VARCHAR VARBINARY und TEXT BLOB.
Ich möchte aber alle Tabellen wieder in utf8_unicode_ci und den Datentyp der Felder wie folgt konvertieren:
- BINARY -> CHAR
- VARBINARY -> VARCHAR
- BLOB -> TEXT
- TINYBLOB -> TINYBLOB
Ich würde mich über eine schnelle Hilfe und ein Script sehr freuen.
Vielen Dank im Voraus!