Vs2005 C#与mySql连接解决中文乱码问题

按我的这篇文章所写:

http://blog.csdn.net/cctt_1/archive/2008/11/02/3206314.aspx

这里这里读出写入英文是没有问题的。

但是我们需要读出写入中文。我在mysql的表有一项设置字符集,改为了GBK编码。

但是还是使用了我上篇文章所写的编码,结果发现插入中文时变为:???

插入中英文结合时,全部的中文变为??英文不变。

在网上搜了下,然后将上篇文章的编码改为:

  1. private SqlAccess sqlAccess = new SqlAccess();
  2. private void button1_Click( object sender, EventArgs e)
  3. {
  4. DataSet ds = sqlAccess.SelectDataSet( “select * from users” );
    1. label1.Text = “” ;
  5. Array alist = ds.Tables[0].Rows[0].ItemArray;
  6. foreach ( object o in alist)
  7. {
  8. label1.Text += o.ToString();
  9. }
  10. UpdateName();
  11. }
  12. private const string sql = “UPDATE USERS SET userName=@userName  WHERE userID=@userID” ;
  13. private const string userName = “@userName” ;
  14. private const string userID = “@userID” ;
  15. private void UpdateName()
  16. {
  17. int i = 1;
  18. string name = GB2312_ISO8859( “和好多岁收到暗示” );
  19. MySqlParameter[] my =
  20. {
  21. new MySqlParameter(userName,MySqlDbType.String),
  22. new MySqlParameter(userID,MySqlDbType.Int32)
  23. };
  24. my[0].Value = name;
  25. my[1].Value = i;
  26. label2.Text = sqlAccess.EXESql(sql, my).ToString();
  27. }
    1. //写入数据库时要进行gb2312转换到iso8895
  28. public string GB2312_ISO8859( string srcString)
  29. {
  30. //字符集gb2312转为iso8859
  31. System.Text.Encoding iso8859=System.Text.Encoding.GetEncoding( “iso8859-1” );
  32. System.Text.Encoding gb2312=System.Text.Encoding.GetEncoding( “gb2312” );
  33. return iso8859.GetString(gb2312.GetBytes(srcString));
  34. }

发现还是原来的问题。然后又搜了搜mysql的中文文档。发现好像column还是有字符集属性的…怎么不知道为啥这样做…太麻烦了。于是改了每一个表中需要中
文的列都改为了gbk,在mysql图形界面的字段详细资料中。但是如果你是使用的mysql非图形界面…那就要辛苦的alter
吧.改完后,运行成功,再也没有??了。

发现windowsApplication使用的string是gb2312编码,但是显示的时候gb2312和iso8895-1都可以。

所以在写入数据库时要转换为iso8895-1编码。注意这里如果转为System.Text.Encoding.GetEncoding(“GBK”)是不可以的。