C# 更改对象列表的编码
我有一个程序,它使用Dapper从SQL Server读取数据,然后将数据保存到另一个MySQL数据库中。它正在做的是:C# 更改对象列表的编码,c#,mysql,sql-server,character-encoding,dapper,C#,Mysql,Sql Server,Character Encoding,Dapper,我有一个程序,它使用Dapper从SQL Server读取数据,然后将数据保存到另一个MySQL数据库中。它正在做的是: 以对象列表的形式从SQL server读入数据,例如list=从SQL server读入数据 打开到MySQL的连接,保存列表 问题是AKindOfObject的某些属性在原始数据库中保存为中文。当数据传输到MySQL数据库时,这些汉字显示为“?” 有没有办法将List的编码更改为C#code中的gb2312?我怀疑这里发生的事情很简单:您的数据库有非unicode列,并且您
list=
从SQL server读入数据列表
AKindOfObject
的某些属性在原始数据库中保存为中文。当数据传输到MySQL数据库时,这些汉字显示为“?”
有没有办法将List
的编码更改为C#code中的gb2312?我怀疑这里发生的事情很简单:您的数据库有非unicode列,并且您正在尝试存储unicode数据。不具代表性的角色确实会受到欢迎。正确的解决方法是:确保您的列是unicode。搞乱列编码可能会奏效,但该死的,这比仅仅使用unicode要费劲得多
Dapper将事物“按原样”传递给ADO.NET;提供者所做的事情取决于提供者。但是,有一种方法可以告诉它在向数据库发送数据时在ANSI和Unicode之间进行选择,即通过
DbString
conn.Execute(sql, new {
id, name,
desc = new DbString { IsAnsi = true, Value = desc }
});
这也允许您控制长度等。但是,我们这里不控制编码;编码通常是数据库本身或提供者的属性。如果MySQL在ADO.NET中有一些定制的控制方法,我会“洗耳恭听”,但首先:您需要让它在原始ADO.NET中工作。问题可能不在您的C代码中,而是在MySQL数据库配置中。您是否能够使用insert语句将中文字符手动插入MySQL数据库的相关列中?