|
最近做网站,服务器用debian系统,发现后台mysql的数据库乱码,网上找了个暂时性的解决方法
把下列文件保存为一个.php文件,然后运行
- <?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();
- ?>
复制代码
为什么说是临时性的呢?因为你用了这个脚本,数据库里原来的数据不乱码了,但是你新加入的数据依然是乱码,正在寻找方法根本性的解决这个问题 |
|