【问题标题】:How to save and retrieve non latin characters in my WinForms application?如何在我的 WinForms 应用程序中保存和检索非拉丁字符?
【发布时间】:2012-06-07 10:11:17
【问题描述】:

我有一个 WinForms 应用程序,它应该能够保存(到 db)并在以后显示非拉丁字符。我知道它与字符集有关。我的数据库和所有表的默认字符集都设置为 utf8。但这仍然不能保存保留其怪异的非拉丁字符:)。

经过一番谷歌搜索和 SO-ing 之后,我知道这是关于 SET NAMES 'utf8' 的东西。但是我在哪里应用这个? SO上有很多类似的线程处理php,他们说必须在查询开始时包含SET NAMES 'utf8'。但是在我的代码中,有数百个查询,并且修补每个地方都是一团糟。

如果我需要为此配置 MySQL,那么可以通过编程方式完成吗?我希望通过在连接字符串中设置这个有一些解决方案。

我试过这个:

conString = "SERVER=localhost;DATABASE=hi;UID=root;PASSWORD=;Min Pool Size=0;Max Pool Size=200;SET NAMES 'utf8'";

这给出了运行时错误,说连接字符串格式不正确。

【问题讨论】:

  • charset=utf8; 怎么样? (见stackoverflow.com/questions/942277/…
  • @jglouie 是的,这很有效,我刚刚发布了答案。
  • 我试图回答这个问题,但它被自动转换为评论。那好吧。很高兴它对你有用:)
  • @jglouie 天哪,简直就是自成体系!

标签: c# mysql ado.net non-latin character-encoding


【解决方案1】:

This 回答说The collation is only used for sorting and comparison, not for saving data.

我试过了,效果很好。

conString = "SERVER=localhost;DATABASE=hi;UID=root;PASSWORD=;Min Pool Size=0;Max Pool Size=200;charset=utf8;";

编辑:让我把它完成。

.NET Connector manual"CharSet specifies the character set that should be used to encode all queries SENT TO THE SERVER. Resultsets are still returned in the character set of the result data."

这意味着:

1,只有在将数据保存到数据库时才需要设置charset=utf8,而在检索时不需要,因为.NET 连接器会以其保存的格式检索它。我并不是说在读取数据时必须修改连接字符串以删除charset=utf8,不。它是双向的。只是明确表示只有明确保存才需要charset=utf8

2,您的数据库将其默认字符集设置为 utf8 甚至不是最重要的。如果您在连接字符串中将字符集定义为 utf8,即使是 latin1 也可以

我测试了以上案例。

【讨论】:

    猜你喜欢
    • 2012-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 2013-01-20
    相关资源
    最近更新 更多