先讲下两个字符集的区别:
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那么 记得在文件最上方写上
lzy © 2008, View php source
header("Content-type: text/html;charset=utf-8");
Parsed in 0.018 seconds
保证文件的编码必须是 UTF-8
解决方法 (1)把你的文件用记事本打开 ,选文件另存为,在文件名的下面有个编码 看看字符集是不是UTF-8 如果不是请修改
2、 保证数据库是UTF8
在添加表的时候 需要设置编码为 UTF8
如果已经添加了 那么可以
在PHPMYADMIN 中查看表结构 的‘整理’属性上 是否为 utf8_general_ci
如果不是 请修改
lzy © 2008, View php source
ALTER TABLE 'gbook' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
Parsed in 0.024 seconds
数据库和字段 的编码同理:
lzy © 2008, View php source
ALTER DATABASE 'testdata' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
ALTER TABLE ' testdata' CHANGE 'test' 'test' VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_bin
Parsed in 0.049 seconds
3、 PHP在连接数据库的时候加上一句:set names utf8
lzy © 2008, View php source
mysql_connect('localhost','user','password');
mysql_select_db('mydb');
mysql_query("set names utf8;");//**设置字符集***
Parsed in 0.046 seconds
这样就做到万无一失了,如果还有什么问题 大家可以给我留言 我会及时回复的