先讲下两个字符集的区别:

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

 

这样就做到万无一失了,如果还有什么问题 大家可以给我留言 我会及时回复的