如何在NpgsqlConnection中设置编码

Ren*_*ink 1 c# postgresql encoding npgsql

我有一个PostgreSQL数据库,它使用字符编码WIN1252.

查询数据库时,某些记录在尝试读取数据时会产生错误,因为它正在尝试将其转换为UTF8.在包含某些非拉丁字符的某些外来名称上会发生这种情况.

错误是:

ERROR: 22P05: character with byte sequence 0x81 in encoding "WIN1252" has no equivalent in encoding "UTF8"
Run Code Online (Sandbox Code Playgroud)

它发生在我打电话Read()的时候NpgsqlDataReader.

我的连接定义为:

new NpgsqlConnection("Server=127.0.0.1;Port=5432;Database=xyz;User Id=****;Password=****;");
Run Code Online (Sandbox Code Playgroud)

如何使用C#读取此数据?

Ren*_*ink 5

我设法解决了这个问题.没有连接字符串或任何属性的设置属性的方式NpgsqlConnectionNpgsqlCommand.

但是,我能够client_encoding在查询中设置值.所以在打开连接后我直接执行了(非)查询:

set client_encoding = 'WIN1252'
Run Code Online (Sandbox Code Playgroud)

之后,同一连接上的任何后续命令都使用了正确的编码并返回结果而没有抱怨.