Created
April 3, 2013 15:10
-
-
Save suziewong/5302071 to your computer and use it in GitHub Desktop.
latin1_swedish_ci to utf8_general_ci
http://bingu.net/472/latin1_swedish_ci-to-utf8_general_ci/
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
define('DB_NAME', 'putyourdbnamehere'); // 数据库名 | |
define('DB_USER', 'usernamehere'); // MySQL用户名 | |
define('DB_PASSWORD', 'yourpasswordhere'); // 密码 | |
define('DB_HOST', 'localhost'); // 很大可能你无需修改此项 | |
function UTF8_DB_Converter_DoIt() { | |
$tables = array(); | |
$tables_with_fields = array(); | |
// Since we cannot use the WordPress Database Abstraction Class (wp-db.php), | |
// we have to make an a stand-alone/direct connection to the database. | |
$link_id = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) or die('Error establishing a database connection'); | |
mysql_select_db(DB_NAME, $link_id); | |
// Gathering information about tables and all the text/string fields that can be affected | |
// during the conversion to UTF-8. | |
$resource = mysql_query("SHOW TABLES", $link_id); | |
while ( $result = mysql_fetch_row($resource) ) | |
$tables[] = $result[0]; | |
if ( !empty($tables) ) { | |
foreach ( (array) $tables as $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'] ."'" : "" ); | |
} | |
} | |
// Change all text/string fields of the tables to their corresponding binary text/string representations. | |
foreach ( (array) $tables as $table ) | |
mysql_query("ALTER TABLE $table CONVERT TO CHARACTER SET binary", $link_id); | |
// Change database and tables to UTF-8 Character set. | |
mysql_query("ALTER DATABASE " . DB_NAME . " CHARACTER SET utf8", $link_id); | |
foreach ( (array) $tables as $table ) | |
mysql_query("ALTER TABLE $table CONVERT TO CHARACTER SET utf8", $link_id); | |
// Return all binary text/string fields previously changed to their original representations. | |
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); | |
} | |
} | |
// Optimize tables and finally close the mysql link. | |
foreach ( (array) $tables as $table ) | |
mysql_query("OPTIMIZE TABLE $table", $link_id); | |
mysql_close($link_id); | |
} else { | |
die('<strong>There are no tables?</strong>'); | |
} | |
return true; | |
} | |
UTF8_DB_Converter_DoIt(); | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment