相关编码信息如下:
"character_set_client latin1"
"character_set_connection latin1"
"character_set_database latin1"
"character_set_results latin1"
"character_set_server latin1"
"character_set_system utf8"
"character_sets_dir C:\\Program Files\\MySQL\\MySQL Server 4.1\\share\\charsets/"使用SQLyog工具查看表中的记录,中文可以正确显示,但是通过C#代码查询到前台,中文就变成了乱码.另外,我知道使用gb2312编码可以解决乱码问题.现在的问题是:在保持latin1编码不变的情况下,如何让前台查询出来的结果可以正确显示中文?这个可以做到吗?如何做?请各位帮忙看看.

解决方案 »

  1.   

    在查询之前,先运行set names utf8;
      

  2.   

    即使LATIN1下,中文也可以被以LATIN的方式存储和显示。但如果客户端设置不是latin1则会乱码http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/12/4174186.aspx
    MySQL 中文显示乱码
      

  3.   

    你程序中是什么编码就在查询数据库之前set names 程序中编码;
      

  4.   

    mysql> set names utf8;
    Query OK, 0 rows affected (0.00 sec)mysql> show variables like "%char%";
    +--------------------------+-------------------------
    -----+
    | Variable_name            | Value
         |
    +--------------------------+-------------------------
    -----+
    | character_set_client     | utf8
         |
    | character_set_connection | utf8
         |
    | character_set_database   | utf8
         |
    | character_set_filesystem | binary
         |
    | character_set_results    | utf8
         |
    | character_set_server     | utf8
         |
    | character_set_system     | utf8
         |
    这个clause是设置客户端编码的包括链接编码 客户端编码 和结果集编码
      

  5.   

    现在的问题是:在保持latin1编码不变的情况下,如何让前台查询出来的结果可以正确显示中文?这个可以做到吗?如何做?请各位帮忙看看. 我也需要这个答案,sqlyog始终无法正常显示latin1编码下的中文
      

  6.   

    latin1是万能编码,存的是任何字符,连二进制也能存,
    set names ascii, 客户端和服务端的字符集间将不进行任何转换。
    要确认你的客户端能正确显示字符,首先你要确认你的服务端LATIN1字符实际存的是什么字符。
    如果是GBK,你的客户端也是GBK,那能正确显示。
      

  7.   

    存储时把gbk/gb2312当成latin1写入数据库,查询时把从数据库取出来的latin1字符串当成gbk/gb2312显示到界面上,这样数据库就不会做任何字符集的转换,你的客户端就会正常显示和输入。
    此方法能够成功的根本原因是gbk/gb2312和latin1都是ansi c字符串,可以当成ascii码字符串来处理。