解决WordPress + mysql-5.0时的乱码问题
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完整的升级方法如下:
- 从原有的数据库中导出表结构和数据。
- 在mysql-5.0中创建数据库,设置字符校对为 utf8_general_ci。
- 向数据库中导入数据,导入时设置数据编码为utf8。
-
修改 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); }