数据库相关的中文数据乱码问题分析

1.查看数据库服务器的支持的字符集

 SHOW CHARACTER SET;
数据库相关的中文数据乱码问题分析_第1张图片
查看支持的字符集.png

几乎所有的字符集数据库服务器都支持,问题在于数据库服务器器按哪种字符集解释收到的请求和按哪种字符集将数据编码发送给客户端。

查看当前的字符集设置

  SHOW VARIABLES LIKE 'character_set%'
数据库相关的中文数据乱码问题分析_第2张图片
查看字符集相关设置.png
  • character_set_client 表示的数据库服务器默认客户端传递的数据所使用的字符集,如果字符集和客户端不一致会导致无法向服务器插入数据,比如当客户端采用gbk,这里设置为utf8的时候,因为对中文的解析不同导致解析失败,gbk一个汉字两个字节,utf8是3个字节
  • character_set_database 表示当前默认的存储内容的字符集这里非常重要,默认情况表的字符集和这里相同。建立表的时候没有特别指定字符集就会依靠这里设置,比如现在的是latin1存入中文是错误。
  • character_set_results 表示数据库将数据返回给客户端的数据的编码字符集
    这部分主要影响客户端的显示,用select 命令从数据库读取数据,如果字符集不一致,客户端中文显示异常。
  • 设置方式
    • set 字段名称 = 属性值;当前回话有效
    • 通过修改配置文件,我用的是Navicat编辑的。

字符集确定了数据的编码格式,校对集用于数据比较的方式

  • _bin: binary,二进制比较, 取出二进制位,一位一位的比较, 区分大小写
  • _cs: case sensitive,大小写敏感, 区分大小写
  • _ci: case insensitice,大小写不敏感,不区分大小写

校对集只有在数据进行比较的时候才会生效,比如根据某个字段进行排序。

在应用数据交互过程中很难保证所有的字符集都是一致的,所以有时会出现乱码问题。比如在网页上会出现中文乱码,是因为浏览器解析网页时所用的默认字符集和编码所用的字符集不一致。所以在html页面头部需要加上下面的代码显示告诉浏览器编码格式用的时UTF8

/* html*/
 header('Content-Type:text/html; charset= utf-8'); /*php*/

结论基本上出现乱码的问题,都是因为解析数据的时候不知道待解析的数据用的编码是格式才出现错误的,如果能够显示的指明数据的格式传递数据的时候都按照相同的编码就不会出现乱码了

你可能感兴趣的:(数据库相关的中文数据乱码问题分析)