各位大虾,小弟有一问题 
我用c语言做http请求,请求和返回数据都能得到的,然后我将请求的数据保存在mysql数据库中,开始我设置的数据库的默认charsert为latin1, 数据库中显示的内容都是正确的,但后来发现latin1不能正确显示在客户端,所以就改成了gb2312的,但是这个时候问题就来了,在数据库中显示都是乱码了。 附:我请求的网站的编码类型是gb2312的,它的返回的html的头是 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 我想请教的问题是,正常来讲,数据库为latin1编码时应该显示乱码,而为gb2312时应该是正常,为什么反过来了呢。 
我应该怎样让mysql在gb2312编码下显示为正常呢。 
是不是要对http请求返回的数据进行一下转换呢,如果要转,应该怎么转呢? 顺便说一下,要插入的表和表里面设置的字段编码方式都是gb2312的,配置都是正确的。

解决方案 »

  1.   

    http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/12/4174186.aspx
    MySQL 中文显示乱码
      

  2.   


    比如“中”字,GB2312 编码为 D6D0D6D0你可以以latin1 的方式存入,这样当你取的时候,如果你仍告诉MYSQL,“我以 latin1 方式取“这样MYSQL不做任何转换,回给你 D6D0但如果你告诉MYSQL,“我以GB2312来取“,这样MYSQL看到表中这一列的字符集为 latin1 而你要的是 gb2312,则MYSQL会进行转换!所以显示得就是乱码了。对表中字段的字符集修改并不影响表中已经插入的数据,所以如果你要改字符集,需要将表中数据导出,然后修改表的字符集,再导入。
      

  3.   

    要插入的表和表里面设置的字段编码方式都是gb2312的,配置都是正确的。
    -----------------------------
    字符集作用范围:
    字段>表>库我请求的网站的编码类型是gb2312的
    -------------------------------
    发送查询取数据库内容前
    试下先执行 set names 'gb2312'看看
      

  4.   

    原因是虽然你源数据和表中都是gb2312,但是你连接mysql的字符集是latin1。
    因此mysql会把本来就是gb2312的字符串当成latin1,并且把它执行latin1到gb2312的转换。解决方法:
    set names 'gb2312';
    或者set names 'gbk';