为什么出现乱码?当我们遇到一些问题的时候,首先要搞明白问题的根源是什么,才能更加高效准确的解决问题。关于MySQL编码的问题,我是困扰了很久,在一番努力下,今天我可以和自豪的讲,MySQL会乱码?对不起,我从没遇到过?可能还是我太年轻,太年轻。废话一番,我们开始步入正题。
一.为什么会乱码?
我想这个问题很简单,大家一定也都知道。那肯定是编码和解码使用的字符集不同导致的。如果我们使用utf-8编码,那么使用gbk解码,不乱码才怪。这是我们就想到如果我使用相同的字符集编码和解码,那肯定就不会乱码了。嗯嗯。聪明的你开始入门了。
二.怎么使用相同的字符集进行编码和解码?
首先我们使用 SHOW VARIABLES LIKE 'char%';
查看MySQL数据库编码,可得到下图所示:
这里我们简单介绍一下 character_set_client、character_set_results
character_set_client: MySQL使用该编码来解读客户端发送过来的数据,例如该编码为 UTF8,那么如果客户端发送过来的数据不是UTF8,那么就会出现乱码。
character_set_results:MySQL会把数据转换成该编码后,再发送给客户端,例如该编码为UTF8,那么如果客户端不使用UTF8来解读,那么就会出现乱码。
在cmd下控制台乱码问题
- 插入或修改时出现乱码:
这时因为cmd下默认使用GBK,而character_set_client不是GBK的原因。我们只需让这两个编码相同即可。
因为修改cmd的编码不方便,所以我们去设置character_set_client为GBK即可。 - 查询出的数据为乱码:
这是因为character_set_results不是GBK,而cmd默认使用GBK的原因。我们只需让这两个编码相同即可。
因为修改cmd的编码不方便,所以我们去设置character_set_results为GBK即可。
三.解决方案
- 方案一
设置变量的语句:
set character_set_client=gbk;
set character_set_results=gbk;
注意:设置变量只对当前连接有效,当退出窗口后,再次登录mysql,还需要再次设置变量。
- 方案二
通过修改配置文件my.ini
default-character-set=gbk
它可以修改三个变量:client、results、connection的字符集为gbk
注意:当我们修改完配置文件my.ini后,要先使用sql命令重启一下MySQL,让其重新加载一下配置文件。
关闭MySQL:
net stop mysql
开启MySQL:net start mysql
再次打开MySQL,同样的做法,不同的结果。修改成功如下图:
使用sql语句查询字符集:show variables like 'char%';
四:验证(是骡是马出来溜溜)
修改前:那叫一个头疼啊!
修改后:那叫一个贼 6啊!