C# 读取 MYSQL 中文乱码的问题,网上很多都要改数据库,我这边抽的是公司买的一个系统,怕有什么影响不敢改。 哪位能说个不改数据库能读取中文的办法。在线等。一直等。

解决方案 »

  1.   

    参考下贴中的检查方法,贴出你的检查结果, 可以实现不改变数据库字符集用C#读取中文,但要分析如何转换。http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/12/4174186.aspx
    MySQL 中文显示乱码
      

  2.   

    show variables like 'char%'; 
      

  3.   


    能给看看么。 我第一次搞MYSQL,好晕。读个数据都这么费劲show variables like 'char%' ;
    +--------------------------+--------------------------------------------------+
    | Variable_name            | Value                                            |
    +--------------------------+--------------------------------------------------+
    | character_set_client     | utf8                                             |
    | character_set_connection | utf8                                             |
    | character_set_database   | gb2312                                           |
    | character_set_filesystem | binary                                           |
    | character_set_results    | utf8                                             |
    | character_set_server     | latin1                                           |
    | character_set_system     | utf8                                             |
    | character_sets_dir       | D:\sinfor\MySQL\MySQL Server 5.0\share\charsets\ |
    +--------------------------+--------------------------------------------------+
    8 rows in set
      

  4.   


    我已经贴出来了。 后面怎么做? 我改了my.ini 都设置了gb2312C#连接也加了charset 都没用
      

  5.   

    mysql> set names
     gb2312;
    Query OK, 0 rows affected
    mysql>试了好多。 都没用。 无奈了。  
      

  6.   

    字符集问题,用MYSQLDUMP导出数据,用WORD之类的软件打开此文件,看看有无提示,
    在统一字符集下重新插入记录
      

  7.   

    还有其他办法么。 我在navicat 里查是能查出中文的。 到C#中就总是乱码了
      

  8.   

    检查MY。INI中
    default-character-set设置
    OR
    navicat中的字符集设置
      

  9.   

    set names latin1
    or
    set names utf8
    试试
      

  10.   

    哎,只是能换成不一样的乱码,都展示不出来中文。
    navicat的字符集设置是怎么看的呢?
      

  11.   


    还要贴什么呢。 MYSQL不会用,不是要我把数据库里的表逐个show create table TableName一下吧.到底解决这个问题的关键点在哪呢。 为什么我用客户端软件可以。用C#就跑出来乱码
      

  12.   


    mysql> show create table username;
     
    +----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | Table    | Create Table                                                                                                                                                                                                                |
    +----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | username | CREATE TABLE `username` (
      `crc` int(10) unsigned NOT NULL,
      `name` varchar(128) NOT NULL,
      `show_name` varchar(128) NOT NULL,
      PRIMARY KEY  (`crc`),
      KEY `index_user` (`crc`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
    +----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    1 row in set
    mysql> show full columns from username;
    +-----------+------------------+-------------------+------+-----+---------+-------+---------------------------------+---------+
    | Field     | Type             | Collation         | Null | Key | Default | Extra | Privileges                      | Comment |
    +-----------+------------------+-------------------+------+-----+---------+-------+---------------------------------+---------+
    | crc       | int(10) unsigned | NULL              | NO   | PRI | NULL    |       | select,insert,update,references |         |
    | name      | varchar(128)     | latin1_swedish_ci | NO   |     | NULL    |       | select,insert,update,references |         |
    | show_name | varchar(128)     | latin1_swedish_ci | NO   |     | NULL    |       | select,insert,update,references |         |
    +-----------+------------------+-------------------+------+-----+---------+-------+---------------------------------+---------+
    3 rows in setmysql> show variables like 'char%';
    +--------------------------+--------------------------------------------------+
    | Variable_name            | Value                                            |
    +--------------------------+--------------------------------------------------+
    | character_set_client     | utf8                                             |
    | character_set_connection | utf8                                             |
    | character_set_database   | gb2312                                           |
    | character_set_filesystem | binary                                           |
    | character_set_results    | utf8                                             |
    | character_set_server     | latin1                                           |
    | character_set_system     | utf8                                             |
    | character_sets_dir       | D:\sinfor\MySQL\MySQL Server 5.0\share\charsets\ |
    +--------------------------+--------------------------------------------------+
    8 rows in setmysql> 
      

  13.   

    | username | CREATE TABLE `username` (
     `crc` int(10) unsigned NOT NULL,
     `name` varchar(128) NOT NULL,
     `show_name` varchar(128) NOT NULL,
     PRIMARY KEY  (`crc`),
     KEY `index_user` (`crc`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 
    问题在这里,你的表使用的是latin1字符集。你可以在程序中使用类似下面代码以转换。
    System.Text.Encoding.GetEncoding("gb2312").GetString(System.Text.Encoding.GetEncoding("iso-8859-1").GetBytes(row[1].ToString()))
      

  14.   


    感谢版主,gb2312没有转换成功,用UTF-8成功了。 谢谢!