其实在我们上网页或者是网站的时候,就经常会出现乱码的情况,这种问题对我们学习还有工作的话都有一定的影响。所以,今天小编把MySQL字符集转换储存原理作为基础,给大家提供几种MySQL中文乱码以及网页中文乱码的解决方法。
(一)MySQL字符集转换过程
了解MySQL怎样把输入的中文储存在数据库中对理解乱码产生的原因很有帮助,了解这一部分内容也会更容易理解后面的内容。
(1)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值对应的编码集,返回给调用者;
注意:以下演示"表中某字段单独的字符集修改方法"、"数据库默认字符集的修改方法"还有"数据表默认字符集的创建方法"。
注意:字符校对集,_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对数据库插入数据时,在网页上调用这些数据显示乱码的原因。如果大家对本教程有什么不明白的地方,欢迎咨询小编,希望可以帮助到大家哦。
¥798.00
¥48.00¥180.00
¥199.00
¥48.00¥180.00
¥29.90
¥199.00