mysql字符集情况如下图
我直接select,结果集有中文不会乱码,
若set names utf8再select,结果集有中文就会乱码,不理解原因...
mysql字符集情况如下图
我直接select,结果集有中文不会乱码,
若set names utf8再select,结果集有中文就会乱码,不理解原因...
** 问题所在:
数据入库的时候存的是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就会乱码
5 回答3.2k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
1 回答4k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
2 回答2.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
5 回答1.4k 阅读
数据库字符集有三个地方需要注意:
1、录入数据时的字符集
2、表数据存储字符集
3、客户端查询时本地字符集
只有你的字符集对应上了才不会乱码,你的问题就是1使用了latin1字符集,2是utf8,这时候就是3,你要使用latin1才能看到不乱码,因为你使用了latin1的编码给到mysql,mysql按照utf8的编码存入,对mysql来说你发过来的就是乱码,我存的也是乱码,想要读出来正常的数据就要按照你最初的字符集编码去读才行
补充一下:
set names utf8;这个操作修改的就是第三种情况:客户端的字符集