用yii做了个投票的小东西,用了sqlite数据库。临上线时,因为考虑到压力问题,换成mysql。只有简单的几个表,直接手工建的。
实际用时,发现数据库中保存的汉字成为????形式的东西。
首先,yii是用了utf8的。config/mail.php中,mysql的连接参数里也有charset=utf8的设置。
其次,建立mysql数据库时也是选了utf8的。建表时没细看。
既然出了乱码,当然要想办法。
先是去网上找了一些东西,要改这个改那个的,问题是我的php+mysql环境是用了phpnow建的,在其它机器上都运行完全正常,不象是配置文件有误。
其次,怀疑是建表时没有注意到表的字符集。看了一下,果然表的字符集给默认设置成了latin-(瑞典)什么的东西,改成utf8-general-ci,(用了phpMyAdmin的表管理下面的“整理”),乱码依旧。
试着手工在phpMyAdmin里有问题的表里增加一条带汉字的记录,出现错误:
Warning: #1366 Incorrect string value: #xxxx #xxxx #xxxx... for column xxxx
看来是mysql自身的问题。没办法,试着删除这个表,重建一个,建时选择utf8字符集,再试,一切正常了。
------------
结论:
一,库的字符集设好了看来还不够,表的字符集也要正确。
二,表的字符集如果建表时设错了,用“整理”功能修改可能无效,需要重建表。