mysql的六处字符集

mysql中的中文乱码问题是非常复杂的,mysql有六处使用了字符集,分别为:client,connection,database,results,server,system。
  • client是客户端使用的字符集
  • connection是连接数据库的字符集设置类型,如果程序没有指明连接数据库使用的字符集类型就按照服务器默认的字符集设置
  • database是数据库服务器中某个库使用的字符集设定,如果建库时没有指明,将使用服务器安装时指定的字符集设置。
  • results是数据库给客户端返回使用的字符集设定,如果没有指明,使用服务器默认的字符集。
  • server是服务器安装时指定的默认字符集设定。
  • system是数据库系统使用的字符集设定。

mysql中文乱码问题有三层因素:

  • 因素一:mysql自身的设计(6处中文)
    使用mysql的命令行,键入**show variables like ‘‘character%’;*;就可以看到六处字符集处分别是什么类型的。
    使用sql命令行输入命令的时候,使用
    mysql -uroot -p密码 --default character_set = gbk,后在执行上面的命令会发现,client,connection,results处的字符格式变成了gbk,不执行这条命令时候,是utf8。设置了gbk后,在当前环境下,在插入数据的带有中文的数据的时候,仍然是会发生乱码的,因为客户端有可能是中文的也有可能是日文的等,所以设计机制决定让他不作为。
  • 因素二:操作系统的语言集的原因
    Linux操作系统是一个多用户的系统,Linux操作系统语言环境和用户配置的语言环境LANGE相互影响。
    查看操作系统语言环境的命令:cat /tec/sysconfig/i18n(用户环境下执行)
    查看用户环境设置的命令: echo $LANG;
    如果修改用户的语言环境配置,会导致操作系统的语言环境配置自动修改,就有可能造成乱码,但是此时插入中文数据时会插入到数据库中,只不过是乱码,这个问题是很严重的,因为这个问题在项目开发中不会被发现。
  • 因素三:文件存储格式
    这个问题就是文件的存储的编码,传到服务器上之前转成utf8后,在传到服务器上。