关于amoeba会乱码的理解
Devel Notes March 3rd, 2009 476 Views今天测试了一下amoeba-mysql-0.32在Windows 2003的搭建过程,用MySQL-5.1.30-Win32做好了主从复制并在amoeba中做好了读写分离的配置,将已经安装好的Discuz论坛改为连接amoeba服务器(192.168.0.10:8066)的时候页面显示全为乱码。在网上找到http://hi.baidu.com/hlxwell/blog/item/ea0d445913af102d2834f0d5.html这里说需要将Discuz改为 set names gbk,因为Discuz不是用的set names来解决MySQL字符集的问题,加了之后果然能正常显示。
分析了amoeba的日志和源代码了解到amoeba初始化连接到MySQL的时候是“set client charset=utf8”采用utf-8的字符串,当然客户端连接到amoeba的时候会根据客户端的字符集重新设置连接MySQL的字符集。比如我本地环境php-5.2.6-Win32连接amoeba的时候判断MySQL client的字符集为latin1,amoeba就会执行“ set names latin1”中文无法正常显示估计和libmysql.dll这个文件有关。
在FreeBSD 7.x的PHP运行环境测试Discuz论坛则一切正常我记得我记得编译PHP的时候先得安装MySQL做为PHP的MySQL client,编译MySQL默认使用了GBK字符集,现在明白全用–with-charset=gbk –with-collation=gbk_chinese_ci参数这里所指定的字符集将决定你的PHP的MySQL client的字符集,之前说过amoeba会根据客户端的字符集重新设置连接MySQL的字符集。

March 16th, 2009 at 19:47:00
分析的不错,赞一下