我的代码返回错误的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
它会产生错误
创建一个示例数据库。
连接字符串在示例项目中一起编码。
那么,问题是,如何正确返回泰语字符?
有什么想法吗?提示?
答案 0 :(得分:1)
要使其发挥作用,需要做几件事:
更改连接本身的字符集:在连接字符串中使用charset=utf8
确保正确设置了数据库和表格字符集。请参阅此处以设置数据库字符集:http://dev.mysql.com/doc/refman/5.0/en/charset-database.html
(目前还不清楚,但我的理解是,在创建相关表格之前需要设置这些charset选项。)