10分钟学会理解和解决MySQL乱码问题(1)
本文将详细介绍MySQL乱码的成因和具体的解决方案
在阅读本文之前,强烈建议对字符集编码概念还比较模糊的同学 阅读下博主之前对相关概念的一篇科普:十分钟搞清字符集和字符编码
MySQL出现乱码的原因
要了解为什么会出现乱码,我们就先要理解:从客户端发起请求,到MySQL存储数据,再到下次从表取回客户端的过程中,哪些环节会有编码/解码的行为。为了更好的解释这个过程,博主制作了两张流程图,分别对应存入和取出两个阶段。
存入MySQL经历的编码转换过程

上图中有3次编码/解码的过程(红色箭头)。三个红色箭头分别对应:客户端编码,MySQL Server解码,Client编码向表编码的转换。其中Terminal可以是一个Bash,一个web页面又或者是一个APP。本文中我们假定 Bash是我们的Terminal,即用户端的输入和展示界面。图中每一个框格对应的行为如下:
- 在terminal中使用输入法输入
- terminal根据字符编码转换成二进制流
- 二进制流通过MySQL客户端传输到MySQL Server
- Server通过character-set-client解码
- 判断character-set-client和目标表的charset是否一致
- 如果不一致则进行一次从client-charset到table-charset的一次字符编码转换
- 将转换后的字符编码二进制流存入文件中
从MySQL表中取出数据经历的编码转换过程

上图有3次编码/解码的过程(红色箭头)。上图中三个红色箭头分别对应:客户端解码展示,MySQL Server根据character-set-client编码,表编码向character-set-client编码的转换。
- 从文件读出二进制数据流
- 用表字符集编码进行解码
- 将数据转换为character-set-client的编码
- 使用character-set-client编码为二进制流
- Server通过网络传输到远端client
- client通过bash配置的字符编码展示查询结果
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。