用Navicat for MySQL 使用utf-8编码,取消对mysql字符集的选择,连接后数据库后数据表中文显示正常。但用asp.net连接显示中文如何处理也显示不了,网络上也查了一天,用了各种办法也未搞定,跪求解决方案。谢谢,下面是我的代码:
                  string connstr = "Database=" + ACDB + ";Password=123456;User ID=root;Server=10.20.2.140;port=811";
                conn = new MySqlConnection(connstr);
                conn.Open();
                //下面是网上说的处理方式,设置成功但显示依旧
                string ss1 = "SET names  'UTF8'";
                MySqlCommand command = new MySqlCommand(ss1, conn);
                command.ExecuteNonQuery();
                
                string query = "select name from crc_name";
                MySqlDataAdapter adapter = new MySqlDataAdapter(query, conn);
                DataTable dt = new DataTable();
                adapter.Fill(dt);                for (int i = dt.Rows.Count - 1; i >= 0; i--)
                {
                    //依然是乱码
                    string sss1 = dt.Rows[i][0].ToString();                    //中文字符集转换
                       var iso = System.Text.Encoding.GetEncoding("ISO-8859-1");
                    var utf = System.Text.Encoding.UTF8;                    byte[] isocodeBytes = iso.GetBytes(dt.Rows[i][0].ToString());
                    byte[] unicodeBytes = System.Text.Encoding.Convert(iso, utf, isocodeBytes);
                    //没有任何作用
                    var value = utf.GetString(unicodeBytes);                }

解决方案 »

  1.   

    首先数据库表中文显示正常证明存在数据库里的中文没有问题在。net中尝试set names gbk;或者set names latin1
      

  2.   

    经过测试,不行哈,你看我代码其实已经设置过的UTF8
      

  3.   

    show variables like 'char%'; 
    确定数据库字符集
      

  4.   

    默认字符集:
    character_set_client latin1
    character_set_connection latin1
    character_set_database utf8
    character_set_filesystem binary
    character_set_results latin1
    character_set_server latin1
    character_set_system utf8
    character_sets_dir D:\AC_Mysql\MySQL\MySQL Server 5.0\share\charsets\set names utf8后的结果是:
    character_set_client utf8
    character_set_connection utf8
    character_set_database utf8
    character_set_filesystem binary
    character_set_results utf8
    character_set_server latin1
    character_set_system utf8
    character_sets_dir D:\AC_Mysql\MySQL\MySQL Server 5.0\share\charsets\
      

  5.   

    set names utf8后仍然不行
      

  6.   

    字符集不统一,在统一的字符集下重新建立表、库,导入数据set names latin1 试试
      

  7.   

    这个数据库不能修改,我们是读取别人的数据库,奇怪的是为什么用Navicat for MySQL 使用utf-8编码,取消对mysql字符集的选择,连接后数据库后数据表中文显示正常。
      

  8.   

    set names latin1的结果是:
    character_set_client latin1
    character_set_connection latin1
    character_set_database utf8
    character_set_filesystem binary
    character_set_results latin1
    character_set_server latin1
    character_set_system utf8
    character_sets_dir D:\AC_Mysql\MySQL\MySQL Server 5.0\share\charsets\
      

  9.   

    服务端字符集只要不设为latin1, 什么都好办, 只要一个语句set names xxx 就搞定
    怀疑你表的字符集被设为latin, 
    用show create TABLE XXXX看一下你表的字符集
      

  10.   

    如果在不能调整数据库的情况下,应该字符转化应该可以解决问题啊,可以试了很多都不行,崩溃了
    //中文字符集转换
                           var iso = System.Text.Encoding.GetEncoding("ISO-8859-1");
                        var utf = System.Text.Encoding.UTF8;                    byte[] isocodeBytes = iso.GetBytes(dt.Rows[i][0].ToString());
                        byte[] unicodeBytes = System.Text.Encoding.Convert(iso, utf, isocodeBytes);
                        //没有任何作用
      

  11.   

    show create TABLE TT
    建议在统一的字符集下操作
      

  12.   

    table中带中文的字符集是latin1编码
      

  13.   

    show create TABLE TT
    贴结果
    如果字段是latin1编码,要在代码中转换成latin1字符
      

  14.   

    CREATE TABLE `crc_name` (
      `account_id` int(10) unsigned DEFAULT NULL,
      `crc` int(10) unsigned NOT NULL,
      `name` varchar(128) DEFAULT NULL,
      PRIMARY KEY (`crc`),
      KEY `index_crc` (`crc`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1
      

  15.   

    你的表设为latin1字符集,只有在代码中转换内容为latin1字符集
      

  16.   

     string ss1 = "SET names  'latin1'";
                    MySqlCommand command = new MySqlCommand(ss1, conn);
                    command.ExecuteNonQuery();
                    
                    string query = "select name from crc_name";
                    MySqlDataAdapter adapter = new MySqlDataAdapter(query, conn);
                    DataTable dt = new DataTable();
                    adapter.Fill(dt);                for (int i = dt.Rows.Count - 1; i >= 0; i--)
                    {
                        //依然是乱码
                        string sss1 = dt.Rows[i][0].ToString();                    //中文字符集转换
                           var iso = System.Text.Encoding.GetEncoding("ISO-8859-1");
                        var utf = System.Text.Encoding.UTF8;                    byte[] isocodeBytes = iso.GetBytes(dt.Rows[i][0].ToString());
                        byte[] unicodeBytes = System.Text.Encoding.Convert(iso, utf, isocodeBytes);
                        //没有任何作用
                        var value = utf.GetString(unicodeBytes);                } 
      

  17.   

      var iso = System.Text.Encoding.GetEncoding("ISO-8859-1");
                        var utf = System.Text.Encoding.UTF8;                    byte[] isocodeBytes = iso.GetBytes(dt.Rows[i][0].ToString());
                        byte[] unicodeBytes = System.Text.Encoding.Convert(iso, utf, isocodeBytes);
                        //没有任何作用
                        var value = utf.GetString(unicodeBytes);                } 上述部分是否为你说的代码部分转换?
      

  18.   

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

  19.   

    用latin1来存中文, 是不明智之举. 
    转换只能依靠自己的程序,当时是如何存进去的,现在就如何解出来.
    "用Navicat for MySQL 使用utf-8编码,取消对mysql字符集的选择,连接后数据库后数据表中文显示正常" 可以判断在latin1字段里实际存的是utf8码试一下:(请原谅我没学过asp.net)
    SET names  'latin1'" 或 set names ascii 是必须的接下来的转换就不要了
    var utf = System.Text.Encoding.UTF8;
    byte[] utfcodeBytes = utf.GetBytes(dt.Rows[i][0].ToString());
    var value = utf.GetString(utfcodeBytes);              
      

  20.   

    如果你的table已将建了,修改数据库的编码格式后,表的格式是不变的,所以要同时修改表的编码格式和列的编码格式。建议先在命令行输入:show create table 表名;
    看一下编码。
    如果没有数据可以重新建表,有数据的活就修改列的编码格式吧。
      

  21.   

    现在的情况是通过string ss = Encoding.GetEncoding("utf-8").GetString(Encoding.GetEncoding("latin1").GetBytes(dt.Rows[ii][0].ToString()));
    中文:视频语音[U3] 获取的结果是:�?�'语�Y�[U3]
      

  22.   

    用Navicat for MySQL 使用utf-8编码,取消对mysql字符集的选择,连接后数据库后数据表中文显示正常。
    但代码转化过来就怎么都不对,太崩溃了。已经搞了3天了。
      

  23.   

    只要把列编码修改为utf8,重新插入中文数据,再查询中文都没有问题。
    但如果不修改列编码,保持latin1,那么写进去读出来,无论我怎么转化,都有问题。
    这个就是结果:写入 视频语音[U3] 
    未经过转化的查询结果是:视频语音[U3]
    经过转化的查询结果是:�?�'语�Y�[U3] 
      

  24.   

    把mysql的所有字符设为utf8
      

  25.   

    用set names binary 试一下, 此语句不进行转换任何.
    在你的程序中, 将获取的字符串当作utf8.
      

  26.   

    设置连接的编码和数据库的编码,程序的编码三者一致,测试set names后连接是否已经是utf8连接,如果是就不用转换了,百度 查找是否可定连接编码。