MySQL - 返回错误的UTF8字符

时间:2014-09-16 03:34:36

标签: c# mysql utf-8

我的代码返回错误的UTF8字符。我不知道如何解决它。

我使用以下代码创建我的表:

string sql = @"
CREATE TABLE `งปลา` (
`วงปลา` int(10) unsigned NOT NULL AUTO_INCREMENT,
`ทศไท` varchar(45) DEFAULT NULL,
PRIMARY KEY (`วงปลา`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
";

using (MySqlConnection conn = new MySqlConnection(txtConstring.Text))
{
    using (MySqlCommand cmd = new MySqlCommand())
    {
        cmd.Connection = conn;
        conn.Open();

        cmd.CommandText = sql;
        cmd.ExecuteNonQuery();

        conn.Close();
    }
}

我插入了一些这样的样本数据:

string sql = "";
using (MySqlConnection conn = new MySqlConnection(txtConstring.Text))
{
    using (MySqlCommand cmd = new MySqlCommand())
    {
        cmd.Connection = conn;
        conn.Open();

        sql = "insert into `งปลา`(`ทศไท`)values('งปลาทศไท');"; ;
        cmd.CommandText = sql;
        cmd.ExecuteNonQuery();

        conn.Close();
    }
}

现在,如果我执行此操作:

dataGridView1.DataSource = null;
DataTable dt = new DataTable();

using (MySqlConnection conn = new MySqlConnection(txtConstring.Text))
{
    using (MySqlCommand cmd = new MySqlCommand())
    {
        cmd.Connection = conn;
        conn.Open();

        cmd.CommandText = "show create table `งปลา`;";
        MySqlDataAdapter da = new MySqlDataAdapter(cmd);
        da.Fill(dt);

        conn.Close();
    }
}

dataGridView1.DataSource = dt;

它返回:

CREATE TABLE `????` (
  `?????` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `????` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`?????`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8

而且:

dataGridView1.DataSource = null;
DataTable dt = new DataTable();

using (MySqlConnection conn = new MySqlConnection(txtConstring.Text))
{
    using (MySqlCommand cmd = new MySqlCommand())
    {
        cmd.Connection = conn;
        conn.Open();

        cmd.CommandText = "select * from `งปลา`;";
        MySqlDataAdapter da = new MySqlDataAdapter(cmd);
        da.Fill(dt);

        conn.Close();
    }
}

dataGridView1.DataSource = dt;

将返回此表:

--------------------
| ????? | ????     |
--------------------
| 1     | ???????? |
| 2     | ???????? |
| 3     | ???????? |
--------------------

所有泰语字符都没有正常显示。

这是MySQL服务器聊天集:

show variables like 'character%';

Variable_name              Value 
-------------              -----------
character_set_client       latin1 
character_set_connection   latin1 
character_set_database     latin1 
character_set_server       latin1 
character_set_system       utf8 

我知道默认字符集应该是UTF8,但是,我没有权限更改默认字符集。

这是我创建的示例项目>> TestThaiMySQL_Test2.zip
它会产生错误 创建一个示例数据库。
连接字符串在示例项目中一起编码。

那么,问题是,如何正确返回泰语字符?

有什么想法吗?提示?

1 个答案:

答案 0 :(得分:1)

要使其发挥作用,需要做几件事:

更改连接本身的字符集:在连接字符串中使用charset=utf8

确保正确设置了数据库和表格字符集。请参阅此处以设置数据库字符集:http://dev.mysql.com/doc/refman/5.0/en/charset-database.html

(目前还不清楚,但我的理解是,在创建相关表格之前需要设置这些charset选项。)