接层上。解决方法是在发送查询前执行一下下面这句:r
SETNAMESutf8r
它相当于下面的三句指令:r
CODEr
SETcharacter_set_clie
tutf8r
SETcharacter_set_resultsutf8r
SETcharacter_set_co
ectio
utf8r
再试试看,正常了吧?r
就是连接之后加个查询r
CODEr
thisquery”SETNAMES‘utf8'”r
看了手册第10章觉得主要还是CharacterSets的问题。r
character_set_clie
t,character_set_results,character_set_co
ectio
三个运行变量是造成乱码的关键。mysql把客户端提交的查询由character_set_clie
t转换为character_set_co
ectio
r
,由于默认网页提交的查询是gb2312表单页面meta里可以看到,而mysql默认将其当作utf8(可以查到此时的character_set_clie
t=utf8),所以必然乱码。同理,mysql返回的结果是已经转换成character_set_results编码的(与表的编码无关),同样默认是utf8,而网页页面把它当gb2312处理,所以必然有标题等由数据库读出的字段是乱码而其他部门文字不乱码的现象。r
以上这个例子是utf8字符集,用此方法,设置为gbk,即可解决r
第三个方法:r
mysql41乱码终极解决方案r
请注意,本文只针对mysql41,其它版本的mysql请看别的文章。r
mysql41是比较烦人,支持多语言的细化设置,再加上phpmyadmi
26也比较笨,默认就是改不动的utf8,怎么弄都乱码。r
好了,废话少说,我们来一步步解决这个问题:r
1修改etcmyc
f文件,改成这样:r
mysqldr
datadirvarlibmysqlr
socketvarlibmysqlmysqlsockr
defaultcharactersetutf8r
mysqlserverr
usermysqlr
basedirvarlibr
mysqld_safer
errlogvarlogmysqldlogr
pidfilevarru
mysqldmysqldpidr
注意:就是加入了一句defaultcharactersetutf8。r
2etci
itdmysqldrestart重新启动mysql;r
3打开phpmyadmi
,选择la
g为