Vs2005 C#与mySql连接解决中文乱码问题
按我的这篇文章所写:
http://blog.csdn.net/cctt_1/archive/2008/11/02/3206314.aspx
这里这里读出写入英文是没有问题的。
但是我们需要读出写入中文。我在mysql的表有一项设置字符集,改为了GBK编码。
但是还是使用了我上篇文章所写的编码,结果发现插入中文时变为:???
插入中英文结合时,全部的中文变为??英文不变。
在网上搜了下,然后将上篇文章的编码改为:
- private SqlAccess sqlAccess = new SqlAccess();
- private void button1_Click( object sender, EventArgs e)
- {
- DataSet ds = sqlAccess.SelectDataSet( “select * from users” );
-
- label1.Text = “” ;
- Array alist = ds.Tables[0].Rows[0].ItemArray;
- foreach ( object o in alist)
- {
- label1.Text += o.ToString();
- }
- UpdateName();
- }
- private const string sql = “UPDATE USERS SET userName=@userName WHERE userID=@userID” ;
- private const string userName = “@userName” ;
- private const string userID = “@userID” ;
- private void UpdateName()
- {
- int i = 1;
- string name = GB2312_ISO8859( “和好多岁收到暗示” );
- MySqlParameter[] my =
- {
- new MySqlParameter(userName,MySqlDbType.String),
- new MySqlParameter(userID,MySqlDbType.Int32)
- };
- my[0].Value = name;
- my[1].Value = i;
- label2.Text = sqlAccess.EXESql(sql, my).ToString();
- }
-
- //写入数据库时要进行gb2312转换到iso8895
- public string GB2312_ISO8859( string srcString)
- {
- //字符集gb2312转为iso8859
- System.Text.Encoding iso8859=System.Text.Encoding.GetEncoding( “iso8859-1” );
- System.Text.Encoding gb2312=System.Text.Encoding.GetEncoding( “gb2312” );
- return iso8859.GetString(gb2312.GetBytes(srcString));
- }
发现还是原来的问题。然后又搜了搜mysql的中文文档。发现好像column还是有字符集属性的…怎么不知道为啥这样做…太麻烦了。于是改了每一个表中需要中
文的列都改为了gbk,在mysql图形界面的字段详细资料中。但是如果你是使用的mysql非图形界面…那就要辛苦的alter
吧.改完后,运行成功,再也没有??了。
发现windowsApplication使用的string是gb2312编码,但是显示的时候gb2312和iso8895-1都可以。
所以在写入数据库时要转换为iso8895-1编码。注意这里如果转为System.Text.Encoding.GetEncoding(“GBK”)是不可以的。