您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
php,mysql数据库乱码完美解决
发布时间:2015-05-02 16:43:52编辑:雪饮阅读()
跟着韩老师学习ajax,好不容易写了一个简易的聊天室:
可是发现每次写入信息到数据库都会出现乱码,非常郁闷,页面编码是gbk,数据库编码也是gbk。遇到问题要冷静,先来一步步查看到底哪里出问题了。既然通过网页来插入数据库信息时出现乱码,那么我何不直接用命令在mysql中测试,遂发现直接在数据库中插入中文数据都是乱码。好家伙,原来问题出现在这里了。用status命令查看数据库信息发现:
原来并不是所有编码都是gbk。mysql默认存储用的瑞典语整理。可是这个默认存储整理的编码百度半天都没有找到,所幸在网友ak-47的帮助下直接可以在我乱码所在数据表的字段中直接修改编码(通过phpmyadmin)下图是我修改好了之后的截图,可以按照这个步骤来修改编码:
原以为编码问题可以到此就画下句话了,可是编码问题还并非如此轻易就能够解决的哦。上面的判断说明了直接在数据库上面用命令来添加数据会乱码,当我们实际来通过php语句来添加数据的时候乱码问题再次出现。
原来在我们的mysql数据库配置文件下还有两项编码配置我们只需要将这两项配置修改如下即可:
[mysql]
default-character-set=gbk
[mysqld]
character-set-server=gbk
如果你的my.ini文件中有[mysql]、[mysqld]但没有其下的编码配置,你可以手动添加,然后保存并重启mysql。
到了这一步骤,我自己重新写了一个php页面来添加数据到数据库,发现乱码问题终于消失了。
那么,是不是到了这一步就大功告成?答案是“否”。令人头大的乱码问题并没有结束,当我使用我的聊天室做为测试时,乱码问题再次出现,可恶可恶,实在是可恶。这次心中有了明确的思路,坚决的断定乱码问题与我写的php问题有关系。
随着我的顺藤摸瓜策略,一步一步终于找到了端倪,原来我的数据是通过ajax进行传参的,默认是utf-8,既然如此我们就需要对接收参数方的变量值进行编码转换,使用如下示例转换(从utf-8转换到gbk):
$con=iconv("UTF-8","gbk",$con);
$sender=iconv("UTF-8","gbk",$sender);
$getter=iconv("UTF-8","gbk",$getter);
再次测试ajax的聊天室,终于ok了。
雪饮个人博客再这里对编码问题整天总结下:
1、页面编码(标签中声明的编码要和文件存储编码一致,若页面中有变量,该变量编码也要和前两者一致);
2、数据库配置:(1)数据库表的字段整理存储编码要和数据库编码一致(2)[mysql]客户端配置编码、[mysqld]服务器端配置编码要一致(3)前两者要一致
3、前两者编码(页面编码和数据库配置)要一致。
处理编码问题还真是劳神伤骨,雪饮个人博客祝大家能够少走弯路,别陷入不必要的纠结之中。
最后在这里特别感谢qq网友ak-47!
关键字词:数据库,乱码,个人博客