Total Pageviews

Wednesday, 4 October 2017

PHP+MYSQL乱码:原因及解决方法

GB2312和UTF-8两个字符集的区别:
GB2312是标准中文字符集,UTF-8 是UNICODE 的一种变长字符编码,即RFC 3629,可以解决多种语言文本显示问题,从而实现应用国际化和本地化。UTF-8 是字节顺序无关的,它的字节顺序在所有系统中都是一样的,排序更加容易。因此 UTF-8 具有更高的性能。不过如果是纯英文的话,用什么都可以,用GB2312也没问题。
再分析下出现乱码的原因
MYSQL+php产生乱码原因:
1. MYSQL数据库默认的编码是utf8,如果这种编码与你的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 'gbook' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
数据库和字段 的编码同理:
ALTER DATABASE 'testdata' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
ALTER TABLE ' testdata' CHANGE 'test' 'test' VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_bin
3、 PHP在连接数据库的时候加上一句:set names utf8
mysql_connect('localhost','user','password');
mysql_select_db('mydb');
mysql_query("set names utf8;");//**设置字符集***

No comments:

Post a Comment