代码改变世界

asp.net连接MySQL及中文乱码问题解决

2010-11-22 11:34  ☆冷枫☆  阅读(2358)  评论(1编辑  收藏  举报

      近段时间公司网站架构需调整,需要将以前一部分网站使用的MSSQL替换成MYSQL,因一直在使用MSSQL所以尝试了下使用MYSQL,感觉用起来和sql区别不是很大。当然,在尝试的过程中也遇到了一些问题,主要表现在读取DB出来的中文数据乱码,搜索整理了一些资料问题得以解决。  

  ASP.NET连接MySQL需要一个组件(.net本身不提供访问MySQL的驱动)MySQL.Data.Dll,此为官方提供(该组件是C#开发,开源的),有多个版本选择,采用的数据访问模式为ADO.NET,访问方式和asp.net访问sqlserver很像,下面是测试demo:  

  string query = "select * from mytable";
            MySqlConnection myConnection 
= new MySqlConnection("Persist Security Info=False;database=protest;server=localhost;Connect Timeout=30;user id=root;pwd=beyond");                
            MySqlCommand myCommand
=new MySqlCommand(query,myConnection);      
            myConnection.Open();      
            myCommand.ExecuteNonQuery();       
            MySqlDataReader myDataReader 
= myCommand.ExecuteReader();    
            
string str="";     
            
while (myDataReader.Read()==true)      
            {            
                str
+=myDataReader["id"];
                str 
+= Convert.ToString(myDataReader["username"]);    
                str 
+=Convert.ToString(myDataReader["ulike"]);     
            }       
            myDataReader.Close();  
            myConnection.Close();
            Response.Write(str);

 

注:MYSQL创建数据库以及表的过程省略,这里默认已经存在库和表数据了。

使用的MySQL.Data.Dll组件可以在http://dev.mysql.com/get/Downloads/Connector-Net/mysql-connector-net-5.0.6.zip/from/pick  这里下载,安装完毕后在Binaries\.NET 2.0目录中将该组件copy到项目bin目录中引用即可,也可以从https://files.cnblogs.com/zzxbest/mysql-connector-net-5.0.6.zip 这里点击下载获取。

      读取MYSQL中文数据乱码问题:    

        1.MYSQL中的数据是这样的:

       
        包含“旅游”、“爬山”两个中文选项内容。用上面的代码读取处理后内容乱码了,具体的乱码信息就不贴出来了,直接贴解决方案吧。

       2.解决方案:       

  //读出时进行转换
    public string ISO8859_GB2312(string read)
    {
        
//声明字符集
        System.Text.Encoding iso8859, gb2312;
        
//iso8859
        iso8859 = System.Text.Encoding.GetEncoding("iso8859-1");
        
//国标2312
        gb2312 = System.Text.Encoding.GetEncoding("gb2312");
        
byte[] iso;
        iso 
= iso8859.GetBytes(read);
        
//返回转换后的字符
        return gb2312.GetString(iso);
    }

 

    即读取数据库数据是把编码进行一下转换操作即可。网上也有相关的资料说可以通过在连接字符串中添加编码;charset=gb2312方式或修改my.ini文件,但我尝试了一下均未能解决上述问题,通过上面的方法方可解决不知何故。