10分钟理解和解决MySQL乱码问题
发布日期:2016-7-10 9:7:41
本文将详细介绍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配置的字符编码展示查询结果 上一条: 五分钟教你写超简单的swoole聊天室
|