MYSQL教程MySQL乱码问题终极指南
《MYSQL教程MySQL乱码问题终极指南》要点: MYSQL数据库mysql的字符集设置众多,从客户端到连接到结果集,从服务器到库到表到列,都可以设置字符集,灵活很强大,但就是很容易出问题,如果不了解其机制,很容易就出现乱码问题. MYSQL数据库为了让大家尽量在工作中少受或者不受乱码的困扰,这里我结合之前其它同学在论坛的发帖,并结合自己的理解和实践,详细分析总结了一下,以飨各位看官. MYSQL数据库关于字符集和乱码的基础知识这里就不详细说明了(请自行搜索),但有一个问题需要特别强调一下:乱码是怎么产生的? MYSQL数据库1)数据传送过程中不会导致乱码 MYSQL数据库更详细的解释:转换导致乱码是指本来是A字符集的数据被当成了B字符集进行解析,而不是说正确的A字符集转换为B字符集. MYSQL数据库如果character_set_connection 设置为gbk,mysql服务器收到数据后按照gbk解析,得到两个正确的中文,然后再转换为这两个中文对应的utf8编码,这就不会产生乱码.) MYSQL数据库【mysql的字符处理机制】 MYSQL数据库详细的处理机制如下图: MYSQL数据库 MYSQL数据库我们模拟一下一条数据从插入到读取的处理流程,看看在整个流程中,字符集是如何辗转腾挪的. MYSQL数据库【读取流程】 MYSQL数据库有了这个流程,我们就很容易定位乱码可能产生的地方,以及产生乱码的字符集配置究竟是哪个了. MYSQL数据库有了上面的理论分析后,我们再结合一个乱码的抓包实例,加深理解,其中有一些问题,请大家思考一下,看看是否真的理解了. MYSQL数据库环境: MYSQL数据库测试语句是插入一个中文字符“你”,其utf8编码为"0xE4 0xBD 0xA0", MYSQL数据库1. latin1发送包? MYSQL数据库 MYSQL数据库思考一下1:为什么客户端和连接都设置了latin1,但最终发送的是正确的utf8编码呢? MYSQL数据库2. latin1接收包? MYSQL数据库 MYSQL数据库思考一下2:为什么接收到的还是正确的utf8编码? MYSQL数据库3. latin1不显示乱码? MYSQL数据库 MYSQL数据库思考一下3:为什么latin1显示了正确的utf8字符? MYSQL数据库4. utf8接收包? MYSQL数据库 MYSQL数据库思考一下4:为什么连接的字符集和数据库的字符集设置成一样了,接收的数据反而不是utf8了?(请与latin1接收数据包对比) MYSQL数据库5. utf8显示包 MYSQL数据库 MYSQL数据库思考一下5:为什么连接的字符集和数据库的字符集设置成一样了,显示反而乱码了?? MYSQL数据库怎么样,上面的思考题是否都有答案了,如果没有,相信下面这幅图能够帮助你: MYSQL数据库这个抓包案例的字符变化图解: MYSQL数据库 MYSQL数据库附:mysql字符编码操作技巧 MYSQL数据库
mysql> show variables like '%char%';
+--------------------------+-----------------------------------------------------+
| Variable_name | 说明 |
+--------------------------+-----------------------------------------------------+
| character_set_client | 客户端字符集 |
| character_set_connection | 当前连接字符集 |
| character_set_database | 数据库字符集 |
| character_set_filesystem | 文件系统字符集,不要修改,使用binary即可 |
| character_set_results | 返回结果集字符集 |
| character_set_server | 服务器默认字符集,当数据库、表、列没有设置时,|
| | 默认使用此字符集 |
| character_set_system | 固定为utf8 |
+--------------------------+-----------------------------------------------------+
MYSQL数据库【修改字符集设置】 MYSQL数据库【问题答案】 MYSQL数据库思考一下1:为什么客户端和连接都设置了latin1,但最终发送的是正确的utf8编码呢? MYSQL数据库思考一下2:为什么接收到的还是正确的utf8编码? MYSQL数据库思考一下3:为什么latin1显示了正确的utf8字符? MYSQL数据库思考一下4:为什么连接的字符集和数据库的字符集设置成一样了,接收的数据反而不是utf8了?(请与latin1接收数据包对比) MYSQL数据库思考一下5:为什么连接的字符集和数据库的字符集设置成一样了,显示反而乱码了? MYSQL数据库以上就是关于MySQL乱码问题大集合,希望能够帮助大家解决MySQL乱码问题,谢谢大家的阅读. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |