Mysql获取数据出现繁体显示为乱码的问题[疑难解决]

作者: unvs 分类: PHP 发布时间: 2012-05-16 21:50 ė18,628 views 6没有评论

将数据从Mysql数据库中导出来,出现的问题还真多,昨天碰到 日历插件中不支持该字符串所表示的DateTime,今天遇到 Mysql导出的数据中繁体显示为乱码、问号 的问题。根据经验试着调整数据库编码,要么还是乱码,要么没有变化。经过苦苦研究,终于解决了,方法比较简单,同时,也摸索了一套解决mysql获取数据出现乱码思路的方案。把它分享出来。

一、分析判断PHP+Mysql出现乱码的原因
基本概括为以下几种情况:
1、Mysql数据库默认的编码是utf8,如果PHP页面的编码与其不一致,可能会造成Mysql数据乱码问题;
2、Mysql在创建表或添加字段时会让你对编码进行选择, 如果PHP页面的编码与其不一致,同样,可能会造成Mysql数据乱码问题;
3、用户提交页面的编码与显示数据的页面编码不一致,那么肯定会造成页面出现乱码。 如:用户提交资料的页面是big5或utf8编码,显示数据的页面却是gb2312;
4、获取的数据中含有繁体中文,而出现乱码,同样可用前面的方法进行原因分析;
5、PHP页面字符集不正确;
6、PHP在连接Mysql数据库时SQL语句指定的编码不对;
7、Mysql版本不对,这点还未深入了解。

二、对症下药、一一解决
对于分析判断Mysql数据出现乱码的原因,分别进行相应的处理,下面整理了一个解决 Mysql数据出现乱码 问题的思路:

1、检查程序页面编码是否与数据库编码一致,两者必须统一,Mysql编码操作或代码设置后面会详细叙述;
2、检查数据库中表或字段编码格式是否与所需的编码一致,同样编码设置操作见后面;比如:页面编码为utf-8,虽然数据库编码为utf8,但如果此数据字段设为gb2312,同样会出现乱码问题。
3、检查连接Mysql数据库的语句指定的编码是否正确,因为可通过mysql_query("SET NAMES UTF8");对数据编码进行设置,需正确设置;
4、对于获取的数据中繁体字显示为乱码情况,当在前面1、2、3条设置都不起作用的时候,可考虑以下解决方案
如:你的网页编码为gb2312,而在提交数据时,可能存在繁体字的情况,那么显示出来肯定会出现乱码的问题。
解决方法:可将网站编码设置为utf-8,及数据库编码设置为utf8,utf-8编码可兼容世界上所有字符。如果已经存在旧的数据,不能简单设置为utf-8,那么可将页面编码设置为GBK,因为GBK比gb2312可以显示更多的字符,特别是要显示简体码的繁体字,只能用GBK。我今天遇到的情况就是通过这种方法,将连接Mysql数据库的语句编码设为GBK,问题成功解决,因为之前的数据是通过gb2312页面保存的,所以其中的繁体字导出会显示为问号。
说到这里就顺便把获取的数据中繁体字乱码问题的其它情况解决方法一块讲了。
5、如果你的繁体字是以big5编码保存的,那么在utf-8的页面显示,肯定会出问题,检查数据编码,将之统一为utf-8即可。
6、另一种解决方法:将表或字段编码设置为latin1_swedish_ci,我的数据库编码就是这种格式,之后我转过utf-8,没有多大变化,网上有人成功解决了繁体乱码问题,不妨一试。
7、其实,还有一种比较笨的办法,用phpmyadmin或其它工具,将数据全部导出到txt文本或sql文件,改变编码,然后导入解决编码问题。
好了,以上就是总结的解决问题的思路,也可以说是方法,如果还是没有解决,那么,难道还有更神秘的问题??关键还是编码问题,勿想其它的地方去。

三、cmd命令、代码设置编码语言
上面讲了思路,部分童鞋可能有些不解,或不知如何去设置。下面分别讲述代码设置、phpmyadmin工具设置数据库编码。
1、cmd命令执行更改编码
通过cmd命令行连上mysql数据库后,设置编码:set names ‘latin1′;表同理,连上表,然后设置字符集;
2、sql语句代码执行更改编码
在phpmyadmin中执行如下命令: ALTER DATABASE ’members’ DEFAULT CHARACTER SET utf8 COLLATE  utf8_general_ci  (这是将members数据库编码设为utf8)
如下命令:ALTER TABLE ‘members’ DEFAULT CHARACTER SET utf8 COLLATE  utf8_general_ci  (这是将members表编码设为utf8) 
如下命令:ALTER TABLE ’members’ CHANGE ’user’ ’user’ VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_general_ci  NOT NULL   (这是将members表中user字段编码设为utf8)
3、PHP页面连接更新语句设置编码
mysql_connect(‘localhost’,'user’,’123456′); 
mysql_select_db(‘my_db’);
mysql_query("set names utf8;");//select之后,sql语句执行之前设置编码语言

本博文章基本上属于原创或收集整理,都是心血结晶。
欢迎转载分享,转载请注明出处,谢谢!
本文地址:Mysql获取数据出现繁体显示为乱码的问题[疑难解决]

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Ɣ回顶部