下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

数据库出现中文乱码该如何去解决?

作者:课课家教育     来源: http://www.kokojia.com点击数:2626发布时间: 2016-11-19 15:00:00

标签: mysqlmysql教程mysql数据库

  其实在我们上网页或者是网站的时候,就经常会出现乱码的情况,这种问题对我们学习还有工作的话都有一定的影响。所以,今天小编把MySQL字符集转换储存原理作为基础,给大家提供几种MySQL中文乱码以及网页中文乱码的解决方法。

  (一)MySQL字符集转换过程

  了解MySQL怎样把输入的中文储存在数据库中对理解乱码产生的原因很有帮助,了解这一部分内容也会更容易理解后面的内容。

  (1)MySQL系统变量中的字符集

中文乱码原理及其解决方法_mysql_mysql教程_mysql数据库_课课家

  参数解析:

  MySQL系统变量中的字符集

  (2)以下四步为MySQL字符集转换过程要遵循的原则:

  首先,在用insertinto或其他方法向数据库插入中文数据时,原始数据要被当做character_set_client值设定的字符集;

  然后,把插入的数据转换成character_set_connection值设定的编码,就等于转换层;

  然后,在转换结束character_set_connection后,把结果储存到"内部操作字符集",确定方法如下四种:

  ■如果有,就用每个数据字段的CHARACTERSET设定值;

  ■要是上述值不存在,就用对应数据表的MySQL扩展,非SQL标准DEFAULTCHARACTERSET设定值;

  ■要是上述值不存在,就用相应数据库的DEFAULTCHARACTERSET设定值;

  ■要是上述值不存在,就用默认的character_set_server值相应的编码集;

  最后,要是遇到查询select,MySQL把以上三步得到的"内部操作字符集"编码结果转为character_set_results值对应的编码集,返回给调用者;

  注意:以下演示"表中某字段单独的字符集修改方法"、"数据库默认字符集的修改方法"还有"数据表默认字符集的创建方法"。

 MySQL字符集转换过程要遵循的原则

MySQL字符集转换过程要遵循的原则

  注意:字符校对集,_ci就表示大小写不敏感,_cs表示大小写敏感,_bin表示按编码值比较结尾。如:在字符序'utf8_general_ci'下,字符'a'和'A'等价,以下会介绍到MySQL中字符校对集;

  (3)字符集转换参数值的修改方法

  MySQL可以用的编码集还有查看校对集方法如下:

 字符集转换参数值的修改方法

  以下为"showvariableslike'%char%'"命令显示的列表对应值的修改方法:

 列表对应值的修改方法

  下面来看看的MySQL中文乱码实例分析。

  (二)MySQL中文乱码实例分析

  实例的环境是ubuntu系统,使用终端连接mysql,本地终端环境默认字符编码utf8,如下:

中文乱码实例分析

中文乱码实例分析

中文乱码实例分析

  注意:根据以上实验能得到重要结论,"character_set_client"还有"character_set_results"的编码设置要跟连接数据库用的终端编码相同,"character_set_connection"连接层使用的字符集要大于或者是等于"character_set_client"还有"内部操作字符集",能够根据本文第一部分字符转换过程分析,要是连接层的字符集小于我们传递给数据库的字符集。例如传递GBK中文字符给数据库,但连接层用了ascii编码,ascii编码没有包含中文字符,2字节的gbk编码被转换成2字节的ascii编码,而中文编码大小超出了ascii的范围,那么在连接层转换时数据就会丢失,最后会得到一堆问号未知数据,"内部操作字符集",如数据表的charset设置的编码集需要可以包含所需要储存的字符。

中文乱码原理与解决方法

  (三)网页乱码解决方法

  (1)设置数据库"character_set_client"还有"character_set_results"值的编码跟连接数据库的页面程序使用的编码相同;

  (2)使用终端操作数据库的时侯,确保终端用的编码跟"character_set_client"还有"character_set_results"值的编码相同;

  (3)在页面代码创建表的时侯,用charset参数定义表字符集,设置的字符集需要可以包含全部需要储存到表中的字符;

  (4)"character_set_connection"连接层的字符集需要大于或者是等于"character_set_client"以及“内部操作字符集”;

  (5)把全部字符集统一成一种字符集,避免内部字符集转换可以提高数据库效率;

中文乱码原理与解决方法

  总结:在中文环境下,Windows命令行终端使用的编码为GBK,win下phpmyadmin编码也被设置为gbk。但是,网页编码却是utf8,win下数据库的"character_set_client",还有"character_set_results"的编码都设置成了utf8。按照前两部分分析很容易理解,用win命令行或者是phpmyadmin对数据库插入数据时,在网页上调用这些数据显示乱码的原因。如果大家对本教程有什么不明白的地方,欢迎咨询小编,希望可以帮助到大家哦。

赞(21)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程