【发布时间】:2014-07-02 15:38:46
【问题描述】:
我有一个 WPF 应用程序,它可以像这样从文件中读取数据:
foreach (String line in File.ReadAllLines(file, Encoding.UTF8))
{}
然后解析每一行并显示在屏幕上,一切正常。一些数据中包含西里尔字母,我用来存储这些数据的字符串也可以很好地显示在应用窗口的屏幕上。
但是,之后我使用这些相同的字符串将它们插入 MySQL 数据库。我正在构建一个查询并启动它MySqlCommand cmd = new MySqlCommand(query, conn);,它成功地在数据库中插入了一个包含适当信息的新行。数字都很好,但是进入数据库并带有西里尔字母的所有字符串都显示为????????
数据库引擎是 InnoDB,表和其中所有 varchar 字段的编码是 utf_general_ci 所以知道发生了什么以及如何在数据库中保存正确的字符串?
编辑: 根据请求,这里有一些代码。数据库连接:
conn = new MySqlConnection();
conn.ConnectionString = "//censored//";
和文件读取/db加载,为了这段代码sn -p的目的而缩短:
foreach (String line in File.ReadAllLines(file, Encoding.UTF8))
{
string[] tokens = line.Split('|');
string query = "INSERT INTO myTable SET first_name = '" + tokens[0] + "'" + ", last_name = '" + tokens[1] + "'";
MessageBox.Show(tokens[0]);
MySqlCommand cmd = new MySqlCommand(query, conn);
cmd.ExecuteNonQuery();
}
消息框显示应有的名称,但进入数据库的是???????。
【问题讨论】:
-
我不熟悉 InnoDB,但您是否可能需要
nvarchar而不仅仅是varchar字段? -
MySQL 中没有 nvarchar 数据类型,但是,我认为这不是问题所在,因为如果我输入它们,我可以成功地将西里尔字符存储在相同的字段中,比如说从PHPMyAdmin 的插入功能。但是,如果我从 WPF 插入数据,那么它会全部完成???????
-
你能发布你插入文本的完整代码吗?即在哪里定义了
query和conn,等等? -
用一些代码 sn-ps 编辑了原始帖子。
-
另外,您可能需要查看参数化 sql,因为它可以避免注入攻击。就像您现在的代码一样,错误的文件可能会给您带来一些麻烦。
标签: c# mysql wpf encoding utf-8