0

我有一个 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'";

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

4

1 回答 1

0

这个答案说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 连接器手册"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-06-02T13:31:48.983 回答