百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> Mysql数据库中文乱码解决方法总结
分享文章到:

Mysql数据库中文乱码解决方法总结

发布时间:01/15 来源: 浏览: 关键词:
在mysql数据库中出现中文乱码最多的情况就是编码问题了,可以说导致中文乱码几乎都是数据库编码或程序编码问题了,我们只要简单调整就可解决了。

最近还在不断完善WBlog博管程序,到现在为止,WBlog还没有安装程序,这两天正忙着写,到这里安装程序已告一段落,基本上可以安装了,但就是还没有检测PHP版本和MYSQL版本的一些参数的设置功

能。测试过程中,发现插入到数据库的中文出现乱码,我不断地修改,不停地运行,前前后后起码几十次,我把这些过程的相关数据都记录下来了,以待整理。这次我要弄出个所以然来。以前也遇到过

数据库乱码相关的问题,但问题解决后,也不问个为什么,就这样不了了之了,久之,当再次发现后又忘记怎么解决了,于是又花好些时间到网上去搜寻答案,始终没有走出这个怪圈。趁着这次难得的

机会,要将数据库中文乱码一网打尽!
插入数据库的中文产生乱码的原因,可能有以下三个因素的影响:
1、数据表字符集的设置"CHARSET=字符编码"
2、PHP文件的编码"<meta http-equiv="Content-Type" content="text/html; charset=字符编码" />"
3、存数据前是否执行mysql_query("set names 字符编码")语句。

数据表字符集的设置

下面是我要用来测试的sql数据

 代码如下

01 "CREATE TABLE `wb_node` (  

02   `id` smallint(6) unsigned NOT NULL AUTO_INCREMENT,  

03   `name` varchar(20) NOT NULL,  

04   `title` varchar(50) NOT NULL,  

05   `ord` tinyint(3) NOT NULL DEFAULT '0',  

06   `status` tinyint(1) NOT NULL DEFAULT '0',  

07   `remark` varchar(150) NOT NULL,  

08   `sort` smallint(6) unsigned NOT NULL,  

09   `pid` smallint(6) unsigned NOT NULL,  

10   `level` tinyint(1) unsigned NOT NULL,  

11   PRIMARY KEY (`id`),  

12   KEY `level` (`level`),  

13   KEY `pid` (`pid`),  

14   KEY `status` (`status`),  

15   KEY `name` (`name`)  

16 ) ENGINE=MyISAM CHARSET=utf8;"

上面数据表的表字符集为"CHARSET=utf8",当然支持中文的还可以是"CHARSET=gbk"或者"CHARSET=gb2312"
PHP文件的编码
php文件编码我是用Adobe Dreamweaver CS5生成的,如图所示:


执行sql编码语句

 代码如下

01 $link = mysql_connect($mysql_host, $mysql_user, $mysql_pass)) {   

02         echo "数据库连接失败! 请返回上一页检查连接参数 ";  

03     } else {  

04        if(mysql_query("CREATE DATABASE `$mysql_dbname`")){  

05            mysql_query("set names utf8");        

06     }else{  

07     exit("创建数据库失败");  

08     };  

09     if(!mysql_select_db($mysql_dbname)){  

10     exit("找不到数据库:".$mysql_dbname.");  

11     };

mysql_query("set names 字符编码"),支持中文字符编码可以是utf8、gbk和gb2312。
以下是要插入到数据表`wb_node`的数据。

 代码如下


01 "INSERT INTO ` wb_node` VALUES ('1', 'admin', '后台项目', '0', '1', '后台项目', '1', '0', '1');";  

02  "INSERT INTO ` wb_node` VALUES ('2', 'news', '文章管理', '0', '1', '文章管理', '1', '1', '2');";  

03  "INSERT INTO ` wb_node` VALUES ('3', 'index', '首页管理', '0', '1', '首页模块', '1', '1', '2');";  

04  "INSERT INTO ` wb_node` VALUES ('4', 'picture', '图片管理', '0', '1', '图片管理', '1', '1', '2');";  

05  "INSERT INTO ` wb_node` VALUES ('5', 'download', '下载管理', '0', '1', '下载管理', '1', '1', '2');";  

06  "INSERT INTO ` wb_node` VALUES ('6', 'page', '单页管理', '0', '1', '单页管理', '1', '1', '2');";  

07  "INSERT INTO ` wb_node` VALUES ('7', 'columns', '栏目管理', '0', '1', '栏目管理', '1', '1', '2');";  

08  "INSERT INTO ` wb_node` VALUES ('8', 'databakup', '数据备份', '0', '1', '数据备份', '1', '1', '2');";  

09  "INSERT INTO ` wb_node` VALUES ('9', 'role', '角色管理', '0', '1', '角色管理', '1', '1', '2');";  

10  "INSERT INTO ` wb_node` VALUES ('10', 'config', '配置管理', '0', '1', '配置管理', '1', '1', '3');";  

11  "INSERT INTO ` wb_node` VALUES ('11', 'blog', '博客管理', '0', '1', '博客管理', '1', '1', '2');";  

12  "INSERT INTO ` wb_node` VALUES ('12', 'user', '用户管理', '0', '1', '用户管理', '1', '1', '2');";  

13  "INSERT INTO ` wb_node` VALUES ('13', 'guestbook', '留言管理', '0', '1', '留言管理', '1', '1', '2');";  

14  "INSERT INTO ` wb_node` VALUES ('14', 'link', '友情链接管理', '0', '1', '友情链接管理', '1', '1', '2');";  

15  "INSERT INTO ` wb_node` VALUES ('15', 'comment', '评论管理', '0', '1', '评论管理', '1', '1', '2');";  

16  "INSERT INTO ` wb_node` VALUES ('16', 'upload', '附件管理', '0', '1', '附件管理', '1', '1', '2');";  

17  "INSERT INTO ` wb_node` VALUES ('17', 'announce', '公告管理', '0', '1', '公告管理', '1', '1', '2');";  

18  "INSERT INTO ` wb_node` VALUES ('18', 'banner', '广告管理', '0', '1', '广告管理', '1', '1', '2');";  

19  "INSERT INTO ` wb_node` VALUES ('19', 'index', '友情列表', '1', '1', '友情列表', '1', '14', '3');";

好了,测试的准备工作已经做好了。待继...

一、保持下面条件1、2不变,只改变条件(3)的编码

 


   1、数据表的字符集:CHARSET=utf8


   2、php文件编码:gb2312


   3、mysql_query("set names 字符编码")


   3.1、mysql_query("set names gbk");显示乱码如图(1)

        图(1)

   3.2、mysql_query("set names gb2312");显示乱码如图(1)


   3.3、mysql_query("set names utf8");显示正常如图(2):

       图(2):


   3.4  不执行mysql_query("set names 字符编码")语句,显示乱码如图(3)

       图(3):
从第一轮的测试结果可以知道,数据表的字符集设置为CHARSET=utf8,并且使用的PHP文件的编码为gb2312,这时为了避免中文乱码,在存入数据前记得执行mysql_query("set names utf8")语句。


二、保持下面条件1、2不变,只改变条件(3)的编码


   1、数据表的字符集:CHARSET=utf8


   2、php文件编码:utf-8


   3、mysql_query("set names 字符编码")


   3.1、mysql_query("set names gbk");显示乱码如图(1)

 

   3.2、mysql_query("set names gb2312");显示乱码如图(4)

       图(4):

   3.3、mysql_query("set names utf8");显示正常如图(2)

 

 

 

 

 

   3.4  不执行mysql_query("set names 字符编码")语句,显示乱码图(3)

 

 

     
第二轮测试和第一轮不同之处就是把PHP文件的编码改为utf-8,测试结果和前面相同。似乎PHP文件的编码不会影响中文乱码,当然这只是初步结果,后面还继续。

 

三、保持下面条件1、2不变,只改变条件(3)的编码

 

 

   1、数据表的字符集:CHARSET=gbk


   2、php文件编码:gb2312


   3、mysql_query("set names 字符编码")


   3.1、mysql_query("set names gbk");显示乱码如图(1)

 

   3.2、mysql_query("set names gb2312");显示乱码图(3)


   3.3、mysql_query("set names utf8");中文正常显示如图(2)


   3.4  不执行mysql_query("set names 字符编码")语句,显示乱码如图(5)

      图(5)


第三轮字符集编码和PHP文件编码都改了,对比前两轮,可知,在存入数据前执行mysql_query("set names utf8"),中文总是正常显示,PHP文件编码对乱码好像真的没有影响。

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有6人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板