您的位置:首页 > 数据库 > MySQL

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

2008-11-02 19:42 881 查看
按我的这篇文章所写: 

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")是不可以的。
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐