• 1
  • 2
  • 3
  • 4
  • 5
阿里云应用开发 首 页  »  帮助中心  »  云服务器  »  阿里云应用开发
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配置的字符编码展示查询结果