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文件编码对乱码好像真的没有影响。

时间: 2024-11-25 13:46:26

Mysql数据库中文乱码解决方法总结的相关文章

PHP连接MySQL数据库中文乱码解决方法

解决办法 页面是是gb2312  代码如下 复制代码 mysql_qurey指定数据库的解码为"set names gb2312"是防止中文乱码的. 页面编码为uft8  代码如下 复制代码 mysql_query('SET NAMES utf8');//根据php文件编码设置链接编码 例  代码如下 复制代码 $connection=mysql_connect ($localhost, $username, $password); mysql_query('SET NAMES utf

mysql数据库中文乱码解决方法

数据库字符集问题会导致乱码,从而消耗开发者蛮多精力.针对mysql的用户,按如下AB所示的方法操作,即可避免大部编码问题 A.mysql安装时的默认编码是latin1,此时要注意需要将其手动更改为utf8. B. 修改my.ini文件 My.ini中的[mysql]对应的是客户端参数     [mysqld]中对应的刚是数据库后台服务的相关参数    两者都有default-character-set属性,将client端设置为GBK编码,后台数据用utf8存储,可以满足大部国内开发者的开发环境

mysqldump备份数据库中文乱码解决方法

用mysql工具mysqldump备份数据库时,如果MySQL服务器上的字符集是 latin1 的,第二世界整理发布mysqldump 出来的中文都是乱码!一个简单的办法是在写备份语句时加上默认字符集选项,如:  代码如下 复制代码 mysqldump -h 127.0.0.1 -P 3307 -u username --default-character-set=gbk -p databasename > dumpfile.txt -h 主机 -P 端口,必须单独用此选项,而不能连续写在主机地

mysql数据库中文乱码应该怎么解决,修改配置文件中的字符编码并没有作用

问题描述 mysql数据库中文乱码应该怎么解决,修改配置文件中的字符编码并没有作用 mysql数据库中文乱码应该怎么解决,修改配置文件中的字符编码并没有作用. 解决方案 把当前数据库字符集改为utf8试一下. 解决方案二: 可以设置当前文本编码,与数据库一致 解决方案三: 先把文本粘贴到记事本,然后改成utf-8 保存后再粘贴回去

ajax中文乱码解决方法总结

ajax乱码解决办法一: 在服务器指定发送数据的格式: 在jsp文件中: response.setContentType("text/text;charset=UTF-8");//返回的是txt文本文件 或是 response.setContentType("text/xml;charset=UTF-8");//返回的xml文件 PHP:header("Content-Type:text/html;charset=GB2312"); ajax乱码

编码-php插入到mysql数据库中文乱码,数据库中的中文可以正常显示

问题描述 php插入到mysql数据库中文乱码,数据库中的中文可以正常显示 PHP获取HTML的POST内容到数据库,插入以后显示乱码,我数据库编码已经设置成UTF8了,然后插入之前我ECHO出来也不是乱码,但是到数据库里面就成乱码了,不知道为什么呢,问之前我已经搜索过了,说要先执行 mysql_query("SET NAMES 'uft8'",$link); 这样,我这样执行以后然后刷新还是一样 解决方案 http://www.111cn.net/phper/31/59059.htm

Mac Mysql数据库中文乱码问题解决_Mysql

Mac 下MySQL数据库中文乱码解决方案: 当我们用框架进行数据库的存储操作时,经常会遇到中文乱码的问题. 如:在使用Java中得SSH框架时,我们需要在web.xml文件中配置编码的filter,具体代码是: <span style="font-family:FangSong_GB2312;font-size:14px;"><!-- 表单处理乱码,必须在OpenSessionInViewFilter的filter之前 --> <filter> &

EF之数据库连接问题与中文乱码解决方法

ef之数据库教程连接问题与中文乱码解决方法 the specified named connection is either not found in the configuration, not intended to be used with the ent 1.首先修改<add name="northwindentities"        connectionstring="metadata=res://*/northwind.csdl|res://*/nort

php excel reader2.21导出excel中文乱码解决方法说明

之前我的PHP教程博客访友询问使用php excel reader2.21导出excel时中文出现乱码如何解决,现我说明下php excel reader导出excel中文乱码的解决方法,希望对使用php excel reader导出excel的朋友有所帮助. php excel reader介绍 php excel reader是一个读取Excel xsl文件内容的一个php excel类,目前最新版本是php excel reader2.21,网上可自行搜索,sourceforge上的php