我有一个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//";
文件读取/数据库加载,为此代码段而缩短:
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();
}
消息框显示应该是的名称,但进入数据库的是???????。
答案 0 :(得分:1)
经过一番争吵之后,我确实找出了问题所在,所以发布了一个答案给大家看:
关键部分是建立与数据库的连接的方式:
conn.ConnectionString = @"Server = YOURSERVER; Database = YOURDB; Uid = YOURUSER ; Pwd = 'YOURPASSWORD'; charset=utf8;";
之前我错过了charset=utf8;
部分所以我假设所有类型的非utf8垃圾都要进入数据库,而不管我是否在连接的两端以UTF8编码。希望这有帮助!