【问题标题】:C# with MySql and Unicode characters带有 MySql 和 Unicode 字符的 C#
【发布时间】:2012-02-15 18:24:17
【问题描述】:

我的问题是使用C#和MySQL数据库通过发送参数保存一些记录时。

虽然我已经将字符集设置为 Utf-8 并且我可以正确看到 unicode 字符,但我在尝试插入 unicode 字符时遇到的问题是它只保存了一半的字符串。

真正奇怪的是,这仅发生在 unicode 字符串(如希腊词)中,并且仅在我发送带参数的查询时发生。

即。如果我在 C# 中看到的查询是:

string query = "INSERT INTO tablename VALUES (NULL, @somestring)";

我将@somestring 参数值设置为“TESTING”。这样就可以了。

如果我尝试将值设置为 unicode 字符串“ΤΕΣΤΙΝΓ”,则查询执行良好,没有错误,但仅保存数据库中的一半字符,即。它只保存“ΤΕΣΤ”。

另一方面,如果我删除参数并将查询调整为:

string somestring = "ΤΕΣΤΙΝΓ";
string query = "INSERT INTO tablename VALUES (NULL,'" + somestring + "')";

查询再次正常工作,并将整个单词/句子保存在数据库中。

希望我解释正确,你能理解我的情况。

谢谢

【问题讨论】:

标签: c# .net mysql utf-8 mysql-parameter


【解决方案1】:

你在c#中声明参数@somestring的长度太短了。

UTF-8 每个字符最多占用 3 个字节,因此您需要长度为 21 而不是 7 以适应测试及其变化

这么说,我没有使用c#调用MySQL(仅SQL Server),但我确定这是问题所在

【讨论】:

  • 感谢您的快速回复。我想你是对的,因为我尝试插入更大的字符串并且它有效。因此,如果该字段是名称或更短的名称,我不应该使用参数吗?因为它在没有参数的情况下“工作”
  • @Kypros:您应该始终使用参数,因为它有助于防止 SQL 注入攻击。一般规则是“从不连接字符串以进行 SQL 调用”。
  • 正是我问这个问题的原因,因为我想要一个使用参数的解决方案。因此,如果我做对了,我应该将我的参数重命名为长度为 21 或更大的东西,对吗?我不喜欢这样我的查询会有多大。
  • MySqlParameter someString= new MySqlParameter("@somestring", MySqlDbType.VarChar, 100);dev.mysql.com/doc/refman/5.0/es/…stackoverflow.com/questions/5777450/mysql-c-insert-issue
  • 是的。多谢了朋友。您对找出问题所在非常有帮助。
猜你喜欢
  • 1970-01-01
  • 2013-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-20
  • 1970-01-01
  • 1970-01-01
  • 2015-10-16
相关资源
最近更新 更多