【问题标题】:Saving strings from WPF to MySQL varchar将字符串从 WPF 保存到 MySQL varchar
【发布时间】: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 插入数据,那么它会全部完成???????
  • 你能发布你插入文本的完整代码吗?即在哪里定义了queryconn,等等?
  • 用一些代码 sn-ps 编辑了原始帖子。
  • 另外,您可能需要查看参数化 sql,因为它可以避免注入攻击。就像您现在的代码一样,错误的文件可能会给您带来一些麻烦。

标签: c# mysql wpf encoding utf-8


【解决方案1】:

经过一番摸索后,我确实弄清楚了问题出在哪里,所以发布了一个让所有人都能看到的答案:

关键部分是您建立与数据库的连接的方式:

conn.ConnectionString = @"Server = YOURSERVER; Database = YOURDB; Uid = YOURUSER ; Pwd = 'YOURPASSWORD'; charset=utf8;";

我之前错过了charset=utf8; 部分,所以我假设所有类型的非utf8 垃圾都会进入数据库,而不管我在连接的两端都使用UTF8 进行编码。希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2015-02-07
    • 2013-03-27
    • 1970-01-01
    • 2015-10-20
    • 2012-07-04
    • 2021-05-08
    • 2012-09-28
    • 1970-01-01
    • 2019-08-19
    相关资源
    最近更新 更多