mysql数据库是原来就有的,只是新加了几个数据表,所以数据库的字符集不能改,数据表和字段的字符集统一设置成了gb2312。
页面设置如下:header("Content-Type:text/html;charset=GB2312");
mysql_query("set names 'gb1312';");//数据库连接成功以后设置
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
不含有中文的sql代码检索是可以的,但中文显示乱码;但是检索语句中有中文就不行了。写入有中文也写得进,但前面写入的再检索也检索不到。
数据库里执行sql语句的时候,如果set names 'gb2312'和select语句写在两行一起执行,返回中文没有乱码;如果先执行set names 'gb2312',再执行select语句就没有检索结果了。
这该如何解决?有没有一种方法,让这两句语句一起执行,同时能返回select的结果集呢?

解决方案 »

  1.   

    "数据库里执行"是指使用phpmyadmin吧?
      

  2.   

    你确定mysql客户端下,执行set names gb2312
    然后select中文的内容可以看到?
      

  3.   

    SET NAMES gb2312语句只是对某一个数据库连接生效,如果你在phpmyadmin中先执行SET NAMES语句,然后再执行SELECT语句,实际上是两个不同连接。
    既然在phpmyadmin中设置编码后执行成功,那按理说在你自己的PHP脚本中也是可以的。
    header("Content-Type:text/html;charset=GB2312");
    改为
    header("Content-Type:text/html;charset=gb2312");
    不清楚charset是不是大小写敏感的,试一下这样修改后行不行。
      

  4.   

    如果你检索的内容是中文,是从客户端提交过来的中文(分为浏览器和ajax提交),还是你文件中的手工写的中文,不一样的中文输入处理方式不一样!
      

  5.   

    请尝试在 你程序的 mysql 连接后设置.set names gb2312
      

  6.   


    连接mysql的话,可以尝试使用pconnect,就是长连接!文件中手工写的话,看文件编码是否gb2312 or gbk的,如果不是换文件编码!另外看看表的构造语句,看到底默认编码是什么编码,可以使用 show create table 表名
      

  7.   

    set names的方式好像不管用