昨天发现 WordPress 模板根目录下的 error.log 文件竟然有 300M 之巨。 error.log 这个文件是专门用来记录 web 服务器访问错误的,如果一旦出现异常,它就会迅速记录下来,所以文件大小会突然增长很快。
打开文件后,看到错误日志记录如下:
[21-Apr-2013 05:44:07] WordPress 数据库查询
SELECT * FROM wpcourse_prli_links WHERE
slug='awesome-flickr-gallery 插件推荐.html' 时发生 Illegal mix of collations
(latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for
operation '=' 错误,这是由 require('wp-blog-header.php'),
require_once('wp-load.php'), require_once('wp-config.php'),
require_once('wp-settings.php'), do_action('init'),
call_user_func_array, prli_redirect, prli_link_redirect_from_slug,
PrliLink->getOneFromSlug, dbrc_wpdb->query,
dbrc_wpdb->dbcr_query 查询的。
[21-Apr-2013 05:44:07] WordPress 数据库查询
SELECT slug FROM wpcourse_prli_links WHERE slug like
'awesome-flickr-gallery 插件推荐.html/%' 时发生 Illegal mix of collations
(latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for
operation 'like' 错误,这是由 require('wp-blog-header.php'),
require_once('wp-load.php'), require_once('wp-config.php'),
require_once('wp-settings.php'), do_action('init'),
call_user_func_array, prli_redirect, dbrc_wpdb->query,
dbrc_wpdb->dbcr_query 查询的。
经分析,其中其实已经把问题写得比较明白了,错误名称就叫 Illegal mix of
collations,指的是在执行一段 SQL 数据库操作的时候,数据库的编码跟要查询文字的编码不匹配。其中一个是
latin1_swedish_ci,另一个是 utf8_general_ci 。
而产生这个错误的表就是 prli_link 这个表。后来一查,发现这个表是一个叫 pretty link 的插件引起的。后面在 phpmyadmin 里手工把这个表的编码从 latin1_swedish_ci 转成了 utf8_general_ci,错误就再也没发生过。
这里要提醒大家的是,由于很多 WordPress 插件都是老外编写的,所以有个别的插件很可能没有考虑到编码的问题,他们很多都是用的西方文字编码,所以有可能在中文博客上发生错误。
在 WordPress 根目录下的 error.log 文件应该经常看一下,否则可能后果很严重。