经过2天的研究,解决了PHP与Mysql通过PDO交互在浏览器中产生正确的中文结果。
首先,要明确一点,最好使用utf-8格式的文件进行PHP的代码编写,其次,要使用utf-8格式的Mysql数据库,第三点,要在使用PDO链接数据库后,使用SQL语句之前使用“set names utf8”这样的语句。而不能使用PDO::__construct中的预先执行指令的方式执行“set names utf8”,因为后一种方法在具体使用过程中并没有产生作用。
本以为,在网页及数据库中表示中文,需要在传输过程中encode和decode,但是,实际并没有进行这样的操作,从浏览器获取的中文直接以post的方式发送给了服务器,服务器将原始数据直接就能存入数据库;从数据库读出中文到传输给浏览器这一过程也没有进行encode,并且到了浏览器后,使用JavaScript插入到当前网页中,也没有unescape,同样能显示中文。
之前为什么没有能够正确显示中文,主要原因就在于以什么编码为主。以GB2312编码为主,那么PHP服务器不可避免的要使用utf-8编码,就需要进行编码转换,如果Mysql中使用了GB2312编码,也会变得较为复杂,特别是对Mysql的存取变得非常离奇古怪。
总之,所有应用中都使用utf-8编码格式,是一种更优的解决方案,数据传递过程及存储过程中不需要对数据进行encode和decode,减少了不必要的麻烦,能够让程序员将注意力集中到解决事务逻辑的层次上来。