上一篇:02【数据库的基本操作】
下一篇:04【DQL查询】
三、MySQL字符集
3.1 DOS命令行下汉字乱码的问题
有的同学可能在MySQL控制台查询时,中文会出现乱码,如下图:
3.1.1 字符集相关参数:
在MySQL系统中维护了几个关于字符集的变量,我们通过如下命令可以查看到:
show variables like '%character%';
和我们有关的有如下参数:
-
character_set_client
:客户端采用的字符集 -
character_set_connection
:MySQL连接采用的字符集 -
character_set_database
:MySQL数据库存储采用的字符集 -
character_set_results
:SQL语句结果集采用的字符集 -
character_set_server
:MySQL服务器采用的字符集 -
character_set_system
:MySQL系统采用的字符集
3.1.2 乱码的原因
在windows下,cmd窗口默认采用的是GBK字符集编码的,MySQL将数据的结果全部以UTF8编码(character_set_results
),然后数据到了cmd窗口时,cmd窗口以GBK进行解码,因此显示乱码,我们可以更改character_set_results
参数:
-- 只在当前窗口剩下,窗口关闭后失效
set character_set_results=gbk;
-- 再次查询数据
select * from student;
此时数据的结果编码为GBK,windows窗口的编码也为GBK,因此显示正常;
3.1.3 客户端编码
我们更改解决了cmd窗口中文显示的乱码,但还有地方有问题;
我们尝试在cmd窗口执行如下SQL语句:
insert into student(id,name) values(8,"小军");
发现插入不进去,Incorrect string value
因为我们的cmd窗口是采用gbk字符集,我们客户端(character_set_client
)采用的是utf8字符集,两个码表不一致,在我们输入中文完毕后,数据被cmd窗口用GBK编码了,但MySQL以为客户端采用的是UTF8编码,因此采用UTF8进行解码,然后进行数据的传递(character_set_connection
)
我们可以修改character_set_client
参数:
set character_set_client=gbk;
-- 插入数据
insert into student(id,name) values(8,"小军");
-- 再次查询数据
select * from student;
3.1.4 数据传递过程
数据首先被cmd窗口编码(GBK),之后MySQL服务器会根据character_set_client
解码,然后根据character_set_connection
编码传递到MySQL服务器,MySQL服务器最终按照character_set_server
编码进行存储;
一般来说character_set_client
、character_set_connection
、character_set_results
都应该保持一致,我们可以通过如下命令来统一设置这三个参数的值:
set names gbk;
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/131708.html