为何mysql命令行select结果集有中文会乱码?

mysql字符集情况如下图

clipboard.png
我直接select,结果集有中文不会乱码,
若set names utf8再select,结果集有中文就会乱码,不理解原因...

阅读 4.4k
3 个回答

数据库字符集有三个地方需要注意:
1、录入数据时的字符集
2、表数据存储字符集
3、客户端查询时本地字符集
只有你的字符集对应上了才不会乱码,你的问题就是1使用了latin1字符集,2是utf8,这时候就是3,你要使用latin1才能看到不乱码,因为你使用了latin1的编码给到mysql,mysql按照utf8的编码存入,对mysql来说你发过来的就是乱码,我存的也是乱码,想要读出来正常的数据就要按照你最初的字符集编码去读才行
补充一下:
set names utf8;这个操作修改的就是第三种情况:客户端的字符集

用 utf8 的方式去读以 latin 方式存储的数据 当然会乱码

** 问题所在:

数据入库的时候存的是latin1编码,你查询的时候用UTF8编码,而latin1无法转化为utf8故显示乱码。

** 分析原因:

set names utf8等价于

SET character_set_client = utf8;    //表示SQL离开客户端时的编码 
SET character_set_results = utf8;    //服务器返回的结果集编码
SET character_set_connection = utf8; //服务器接收后转换的字符编码

这样就规定了客户端和服务器之间通信编码的统一。

** 结论:
你在初始数据入库的时候都是Latin1编码的数据,后面执行set names utf8后,查询的数据从latin1转为utf8就会乱码

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题