【问题标题】:Change encoding of a list of objects更改对象列表的编码
【发布时间】:2015-02-15 02:16:26
【问题描述】:

我有一个程序,它使用 Dapper 从 SQL Server 读取数据,然后将数据保存到另一个 MySQL 数据库中。它的作用是:

  1. 从 SQL Server 读取数据作为对象列表,例如List<AKindOfObject> = 从 SQL Server 读入数据
  2. 打开与 MySQL 的连接,保存 List<AKindOfObject>

问题是AKindOfObject的某些属性在原始数据库中保存为中文。当数据传输到MySQL数据库时,这些汉字显示为“?”。

有什么办法可以将C#代码中List<AKindOfObject>的编码改为gb2312?

【问题讨论】:

  • 问题可能不在您的 C# 代码中,而在 MySQL 数据库配置中。是否可以使用 INSERT 语句手动将汉字插入 MySQL 数据库中的相关列?

标签: c# mysql sql-server character-encoding dapper


【解决方案1】:

怀疑这里发生的事情很简单:您的数据库有非 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 中工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-13
    • 1970-01-01
    相关资源
    最近更新 更多