修正统计插件statpresscn的一个写UTF-8数据的错误

博客的访问统计插件使用的是statpresscn,从一开始使用163的api解析ip地址,就发现写入会出错,当时不以为意,随便改为其他的api(返回的地址一般都是空串)。直到昨天小烈留言,才发现原来用户名为中文字符同样也会出错。于是决心解决它。

WordPress database error: [Incorrect string value: ‘\xE7\x83\x88\xE4\xB9\x8B…’ for column ‘user’ at row 1]
INSERT INTO blog_wp_statpressCN (date, time, ip, urlrequested, statuscode, ptype, pvalue, agent, referrer, search,nation,os,browser,searchengine,spider,feed,user,timestamp) VALUES (‘20100820′,’00:25:24′,’125.46.23.194′,’/index.php/gbook’,”,’page’,’103′,’Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 (.NET CLR 3.5.30729)’,’https://kuyur.info/blog/index.php/archives/category/ongaku’,”,”,’Windows XP’,’Firefox 3′,”,”,”,’烈之斩’,’1282263924′)

从小烈反馈以及余自测的错误来看,是UTF-8字符要写入数据库时出错。访客在留言后,cookies自动记录用户名,访客再访问页面,statpresscn这时候采集的不再是ip,而是用户名。“\xE7\x83\x88\xE4\xB9\x8B”是“烈之”的UTF-8编码。余的博客是UTF-8编码,表单提交到mysql的字符类型也是UTF-8,但博文写得好好的,没理由是服务器那边的错误。将数据库进行备份,下载回来一看,发现表blog_wp_statpress的CHARSET居然是latin1。错误正是出在这里。(建议statpresscn作者在创建数据表时按照blog设定的编码创建)

修改表的字符集、user字段的CHARACTER SET为UTF-8,用中文用户名留言后的错误消失。将解析ip的api改回163,修改nation字段的CHARACTER SET为UTF-8,博文最开始提到的错误也消失。

以防万一,将tinytext和text类型的字段都改成了UTF-8。

ALTER TABLE blog_wp_statpress default CHARACTER SET utf8;
ALTER TABLE blog_wp_statpress modify user tinytext CHARACTER SET utf8;
ALTER TABLE blog_wp_statpress modify urlrequested text CHARACTER SET utf8;
ALTER TABLE blog_wp_statpress modify agent text CHARACTER SET utf8;
ALTER TABLE blog_wp_statpress modify referrer text CHARACTER SET utf8;
ALTER TABLE blog_wp_statpress modify search text CHARACTER SET utf8;
ALTER TABLE blog_wp_statpress modify nation tinytext CHARACTER SET utf8;
ALTER TABLE blog_wp_statpress modify os tinytext CHARACTER SET utf8;
ALTER TABLE blog_wp_statpress modify browser tinytext CHARACTER SET utf8;
ALTER TABLE blog_wp_statpress modify searchengine tinytext CHARACTER SET utf8;
ALTER TABLE blog_wp_statpress modify spider tinytext CHARACTER SET utf8;
ALTER TABLE blog_wp_statpress modify feed tinytext CHARACTER SET utf8;
ALTER TABLE blog_wp_statpress modify ptype tinytext CHARACTER SET utf8;

可以将上述sql语句保存sql文件,在mysql中用source命令执行。

2010年8月20日 | 归档于 技术
标签: ,
  1. 2010年8月21日 09:51 | #1

    谢谢。新版本中已修正。

发表评论

XHTML: 您可以使用这些标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
:wink: :-| :-x :twisted: :) 8-O :( :roll: :-P :oops: :-o :mrgreen: :lol: :idea: :-D :evil: :cry: 8) :arrow: :-? :?: :!: