我的代码返回不正确的 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/