为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
海绵宝宝撒 2019-03-09 14:36:25
mysql字符集情况如下图 我直接select,结果集有中文不会乱码,若set names utf8再select,结果集有中文就会乱码,不理解原因...
查看完整描述

3 回答

?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

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

查看完整回答
反对 回复 2019-03-18
?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

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

查看完整回答
反对 回复 2019-03-18
?
动漫人物

TA贡献1815条经验 获得超10个赞

** 问题所在:

数据入库的时候存的是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就会乱码

查看完整回答
反对 回复 2019-03-18
  • 3 回答
  • 0 关注
  • 1664 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信