using MySql.Data.MySqlClient;A:连接问题。连接MySQL数据库,连接字符串如下:
"Persist Security Info=no;Data Source={0};Port={1};Database={4};User Id={2};Password={3};charset=utf-8;Connect Timeout=120";
在WebForm下可以连接,但是在WinForm下出错:Unknown character set: 'utf'B:乱码问题
MySQL中使用了默认的字符集(latin1?),读取数据时,有中文的话,得到乱码
注:不能修改MySql的配置
在网上找了一个方法,对读出的字符串进行处理,代码如下DataTable DealTable_Str(DataTable gDataTable)
    {
        DataTable xReturn = gDataTable;
        if (xReturn == null)
        {
            return xReturn;
        }
        if (xReturn.Rows.Count == 0)
        {
            return xReturn;
        }
        try
        {
            string[] xName = GetStringField(xReturn);
            if (xName != null && xName.Length > 0)
            {
                for (int i = 0; i < xReturn.Rows.Count; i++)
                {
                    for (int j = 0; j < xName.Length; j++)
                    {                        if (xReturn.Rows[i][xName[j]] != null && !(Convert.IsDBNull(xReturn.Rows[i][xName[j]])))
                        {
                            string y = (string)(xReturn.Rows[i][xName[j]]);
                            if (y != "")
                            {
                                byte[] buf = System.Text.Encoding.GetEncoding(28591).GetBytes(y);
                                y = System.Text.Encoding.Default.GetString(buf);
                                xReturn.Rows[i][xName[j]] = y;
                            }
                        }
                    }
                }
            }        }
        catch
        {
        }        return xReturn;
    }
    String[] GetStringField(DataTable gDataTable)
    {
        string[] xReturn = null;
        DataTable xDT = gDataTable;
        if (xDT == null)
        {
            return xReturn;
        }
        if (xDT.Rows.Count == 0)
        {
            return xReturn;
        }
        try
        {
            string xCol = "";
            for (int i = 0; i < xDT.Columns.Count; i++)
            {                Type xType = xDT.Columns[i].DataType;
                if (xType == typeof(string))
                {
                    //byte[] buf = System.Text.Encoding.GetEncoding(28591).GetBytes(xDT.Columns[i].ColumnName);
                    //xDT.Columns[i].ColumnName = System.Text.Encoding.Default.GetString(buf);
                    xCol += "|" + xDT.Columns[i].ColumnName;
                }
            }
            if (xCol.Length > 0)
            {
                xCol = xCol.Remove(0, 1);
            }
            xReturn = xCol.Split('|');
        }
        catch
        {
            xReturn = null;
        }
        return xReturn;
    }核心语句也就是
byte[] buf = System.Text.Encoding.GetEncoding(28591).GetBytes(y);
y = System.Text.Encoding.Default.GetString(buf);
对读出的数据进行转换,在WebFrom下可以,但是有一个问题,有时读不到数据,需要刷新才能看到结果。
将问题A中的连接字符串改为charset=utf8,则WinForm可以连接上,也能得到数据,对于普通的中英文没有什么问题,但是当内容中有特殊的字符串时,就得不到正确的查询值了,比如:◇﹎儍咾嘙﹏多谢指点!