0

有一些基于 NONE 编码的旧数据库,具有独特的拉丁字符,如 á,读起来像?. 现在,正确的形式是以正确的字符集形式 NONE 读取 DB,它是在连接字符串中指定的,但是如果指定 charset = NONE,库 FirebirdSql.Data.FirebirdClient 也不会读取这些值。我该如何解决这种情况?现在的结果就像“编辑”,但需要带有撇号。我正在使用 .NET Core 和 FirebirdSql.Data.FirebirdClient 版本 7.10.1,我尝试降级并且是相同的。

4

1 回答 1

1

如果您知道这些列中存储的数据的实际字符集是什么,则可以将数据转换为正确的字符集。

例如,如果字符应为 windows-1252 (WIN1252):

select cast(yourcolumn as varchar(100) character set win1252) from yourtable
-- replace varchar(100) with the actual size

要获得更持久的解决方案,请使用正确的字符集创建一个新数据库,然后将数据泵入,应用正确的转换。

请注意,将 NONE 指定为连接字符集几乎从来都不是正确的解决方案,即使从使用 NONE 作为列字符集的数据库中读取,当您使用 NONE 时,上述转换技巧也可能无法正常工作作为连接字符集,这种情况下最好指定 UTF8 作为连接字符集。

通常,将数据的预期字符集指定为连接字符集也将允许您读取数据,但每个驱动程序的详细信息会有所不同,而且我不确定 Firebird ADO.net 提供程序的行为。

于 2021-03-10T08:12:06.487 回答