MySQL中文乱码问题

来源:互联网 发布:mysql批量删除 编辑:程序博客网 时间:2024/05/23 11:09

估计有许多新手在使用时都会遇到这个问题

MySQL中文乱码问题

中文乱码

其实这个问题的解决方法非常非常简单,只需要一句话:set names gbk;但要弄清这个问题的实质,还是需要仔细讲讲的。

首先,我们查看服务器到底识别哪些字符集,敲下指令 show characeter set;

MySQL中文乱码问题

mysql支持的字符集

可以看到,mysql支持非常多的字符集,基本上都支持。那为什么还是会出现乱码呢?要回答这个问题,我们还要看看一些东西。既然服务器识别这么多:,总有一种是服务器默认的跟客户端打交道的字符集 Show variables like ‘character_set%’;可以看到系统默认的字符集为utf8(character_cet_client)

MySQL中文乱码问题

可能你有疑问,utf8不是对的么?我表结构用的都是utf8的呀!这里的问题根源是:客户端数据只能是GBK(因为我们用的是window中文操作系统), 而服务器认为是UTF8。这就好比你和一个美国人聊天。你说中文“你好”,美国人以为你说的是英语,但是他不知道英文的‘nihao'什么意思。所以,这时候,需要修改服务器给客户端的数据字符集为GBK:

MySQL中文乱码问题

这个时候显示已经没有问题了,但是还有问题没解决,为什么我明明插入了一行name为"是否",但是显示出来是空呢?character_cet_results 注意上图这个,值为utf8。这是什么意思?他表示服务器给客户端的数据字符集为GBK。继续举个栗子,你是中国人,一个外国人对你说’how are you',你只懂中文,所以不懂他的意思。解决办法:修改服务器给客户端的数据字符集为GBK

set character_set_results = GBK ;好了,这时候,基本问题全解决了。

上文,刚开始的指令:set names gbk; 等同于character_set_client,character_set_results,character_set_connection三条指令。其实character_set_connection不需要设置的,设置成一样的话,效率更好些,不设置也没关系。

估计你还有问题,为什么gbk不乱吗呀,我们设置的字段不是utf8么。继续举例子,你去银行是不是只能存人民币?美元英镑泰铢等就不可以存了么?黄金也可以存呀。你只需要取的时候告诉他你要兑换成人民币不就可以了么

0 0