我有一个PostgreSQL数据库,它使用字符编码WIN1252
。
查询数据库时,某些记录在尝试读取数据时会产生错误,因为它正在尝试将其转换为UTF8
。这种情况发生在一些含有某些非拉丁字符的外国名称上。
错误是:
ERROR: 22P05: character with byte sequence 0x81 in encoding "WIN1252" has no equivalent in encoding "UTF8"
当我在Read()
上致电NpgsqlDataReader
时会发生这种情况。
我的连接定义为:
new NpgsqlConnection("Server=127.0.0.1;Port=5432;Database=xyz;User Id=****;Password=****;");
如何使用C#读取此数据?
答案 0 :(得分:5)
我设法解决了这个问题。无法在连接字符串或NpgsqlConnection
或NpgsqlCommand
的任何属性中设置属性。
但是,我能够在查询中设置client_encoding
的值。所以在打开连接后我直接执行了(非)查询:
set client_encoding = 'WIN1252'
之后,同一连接上的任何后续命令都使用了正确的编码并返回结果而没有投诉。