c# - MySQL - 返回不正确的 UTF8 字符

标签 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
它将产生错误。
创建示例数据库。
连接字符串在示例项目内一起编码。

那么,问题来了,如何正确返回泰文字符?

有什么想法吗?提示?

最佳答案

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

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

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

(尚不清楚,但我的理解是,需要在创建相关表之前设置这些字符集选项。)

关于c# - MySQL - 返回不正确的 UTF8 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25860253/

相关文章:

mysql - 使用 JOIN 和 GROUP BY 更新 MySQL 表

json - 使用 JSON-API 获取的字符串在 Swift 中从 base64 转换为 UTF8

c# - 在 app.config 之外的 Entity Framework 中为 PostgreSQL 数据库设置一个 connectionString

c# - 如何获取gridview的下拉列表的值?

c# - WCF 和 DTO 的大小

java - conwert 对象,其中包含 utf-8 的字符串到具有正确编码的字符串

php - 如何将 Unicode 特殊字符转换为 html 实体?

c# - 在 Visual Studio 中禁用特定代码块的代码格式

php - SQL Buddy + https(ssl) + nginx 无法登录

mysql - 将数据从 Excel 添加或更新到 MYSQL