我有一个WinForms应用程序,它应该能够保存(到db)并稍后显示非拉丁字符。我知道它与charset有关。我的数据库和所有表的默认字符集都设置为utf8。但这仍然不能保存非拉丁字符保留他们的怪异:)。
经过一些谷歌搜索和搜索后,我知道这是关于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'";
表示连接字符串格式不正确的运行时错误。
答案 0 :(得分:0)
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连接器会以其保存的格式检索它。我不是说在读取数据时必须修改connectionstring以删除charset=utf8
,否。它有两种方式。只是明确表示只明确保存需要charset=utf8
。
2,你的db的默认字符集设置为utf8并不是最重要的。如果你在connectionstring中定义的字符集为utf8
,那么即使是latin1也可以我测试了上述情况。