我有一个连接字符串如下
“Server=localhost;Uid=root;Pwd='abcd';Database=testdb;charset=utf8;ConnectionReset=True;”
使用unicode字符插入数据库表列的任何操作都将作为特殊字符插入。如果我从连接字符串中删除“ConnectionReset=True;”,一切正常。
知道这里发生了什么吗?
注意:我相信我的代码是好的,因为当我从连接字符串中删除ConnectionReset=True;
部分时,插入unicode是好的。
最佳答案
您遇到了MySQL Bug #85185:“ConnectionReset pooling选项不保留CharSet选项值”。
使用ConnectionReset=true
是一个好主意;但是,这样做的副作用是将连接字符集重置为服务器默认值,这不是您想要的我可以想到两个解决办法:
使用MySqlConnector,这是一个替换的ADO.NET MySQL连接器库,它修复了这个(和许多其他)连接器/NET错误
每次调用connection.ExecuteNonQuery("SET NAMES utf8mb4");
后执行connection.Open()
。这将修复从池返回的连接重置后的连接字符集。
最后,MySQLutf8
字符集实际上不是UTF-8,因此use utf8mb4
instead。
关于c# - MySQL Charset = UTF-8和ConnectionReset = True不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47185831/