PHP与MySql乱码原因汇总
GB2312和UTF-8两个字符集的区别:
GB2312是标准中文字符集,UTF-8 是UNICODE 的一种变长字符编码,即RFC 3629,可以解决多种语言文本显示问题,从而实现应用国际化和本地化。UTF-8 是字节顺序无关的,它的字节顺序在所有系统中都是一样的,排序更加容易。因此 UTF-8 具有更高的性能。不过如果是纯英文的话,用什么都可以,用GB2312也没问题。
MYSQL+php产生乱码有以下几个原因:
1. MYSQL 数据库默认的编码是latin1 -- cp1252 West European,最好将其改为utf-8,如果这种编码与你的PHP网页不一致,可能就会造成MYSQL乱码.
2. MYSQL 创建表时会让你选择一种编码 ,如果这种编码与你的网页编码不一致, 很有可能造成MYSQL乱码.
3. MYSQL 创建表时添加字段是可以选择编码的,如果这种编码与你的网页编码不一致,很有可能造成MYSQL乱码.
4. 用户提交页面的编码与显示数据的页面编码不一致,就肯定会造成PHP页面乱码.
5. 如用户输入资料的页面是big5码, 显示用户输入的页面却是gb2312,这种100%会造成PHP页面乱码.
6. PHP页面字符集不正确.
7. PHP连接MYSQL数据库语句指定的编码不正确.
解决方法:
拿UTF8来举例
1、 保证页面的编码
如果是html 那么别忘了在 文件开头写上
<meta http-equiv=”Content-Type” content=”text/html;
charset=utf-8″>
如果是 php那么
记得在文件最上方写上
header(”Content-type: text/html;charset=utf-8″);
同时必须保证文件的编码必须是 UTF-8.
解决方法:把文件用EditPlus或者UltraEdit等软件打开,把文件另存为,注意选择字符编码方式,选择UTF-8.
2、 保证数据库是UTF8
在添加表的时候,需要设置编码为UTF-8
如果已经添加了,那么可以在PHPMYADMIN 中查看表结构的‘整理’属性上是否为 utf8_general_ci
如果不是 请修改
ALTER TABLE `chuxin_gb2312`
DEFAULT CHARACTER SET=utf8;
数据库和字段 的编码同理:
ALTER DATABASE `mysqlcharsettest` DEFAULT CHARACTER SET=utf8;
ALTER TABLE `chuxin_gb2312` MODIFY COLUMN `send` varchar(40) CHARACTER SET utf8 NOT NULL AFTER
`id`;
3、 PHP在连接数据库的时候加上一句: set
names utf8
mysql_connect(’localhost’,'user’,'password’);
mysql_select_db(’ mysqlcharsettest’);
mysql_query(”set names utf8;”); //**设置字符集***
其它情况:
在本机开发好的MySQL数据表,在本机测试一切正常,但用网站空间商提供的PHPmyAdmin上传时却出现问题,上传失败。尤其是使用国外PHP空间。
解决方法:首先查看网站空间商提供的PHPmyAdmin字符集设定,确定自己所建数据表与服务商的是同一编码。在国外MySQL是不支持gb2312 的,甚至最新版的Apache也不支持gb2312。如果是因为编码不统一,可以重建数据表,当然是用国际标准的UTF8.
附上本机测试成功代码:demo