mysql 从版本 4.1 起增加了多国语言字符集功能。 数据在插入到数据库或者从数据库中取出时,mysql会自动进行字符集变换。 在创建数据库时必须要指定数据库字符编码,而客户端在连接mysql时也必须要指定客户端字符编码。 假设数据库字符编码utf8,而客户端字符编码gb2312, 那么执行select时mysql会将字符串从 utf8 转换成 gb2312, 而在执行 insert、update等时会将客户端输入的数据从 gb2312 转换成 utf8。

WordPress的数据使用 UTF-8 编码,因此在 mysql-5.0中创建数据库时应当将字符集指定为 utf8。 遗憾的是 php 等脚本语言不会自动设置客户端字符编码,因此mysql会选择默认的 latin1 , 这样在执行 select 时mysql会将数据从utf-8转换到latin1,造成乱码现象。

解决方法就是在执行 mysql_connect 之后执行以下语句

mysql_query("SET NAMES utf8");

使用phpMyAdmin-2.8.0.2完整的升级方法如下:

  1. 从原有的数据库中导出表结构和数据。
  2. 在mysql-5.0中创建数据库,设置字符校对为 utf8_general_ci。
  3. 向数据库中导入数据,导入时设置数据编码为utf8。
  4. 修改 wp-includes/wp-db.php,在wpdb类的wpdb函数中(57行前后)添加以下内容。

     function wpdb($dbuser, $dbpassword, $dbname, $dbhost) {
         $this->dbh = @mysql_connect($dbhost, $dbuser, $dbpassword);
         ......
         $this->query("SET NAMES utf8");          // 添加这一行
         $this->select($dbname);
     }
    

mysql-5-update.png