按我的这篇文章所写:
http://blog.youkuaiyun.com/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")是不可以的。