Created
July 22, 2013 06:10
-
-
Save WenLiangTseng/6051625 to your computer and use it in GitHub Desktop.
將資料庫由latin1轉換為utf-8
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(); | |
?> |
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檔案 | |
將以上的程式碼加入後 | |
改好連線資訊 | |
執行 | |
原先為latin1_swedish_ci的資料表 | |
就會被改為utf8_general_ci |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment