无法在 "Portuguese" 数据库上使用 npgsql select 某些行

Cannot select some rows with npgsql on a "Portuguese" database

我有一个使用 "SQL_ASCII" 和模板 "template0" 创建的 postgresql 数据库。它以葡萄牙语保存数据,所以我有 "Não"、"Feijão"、"Avô" 等数据。当我尝试检索具有此类字符“~^”的行时,它不起作用,否则它会起作用。

错误:

我正在使用 Npgsql 和 Dapper

<packages>
  <package id="Dapper" version="1.50.2" targetFramework="net45" />
  <package id="Npgsql" version="3.1.7" targetFramework="net45" />
</packages>

我搜索了很多,但没有任何效果。我试过:

正在连接字符串中设置客户端编码:

var sqlBuilder = new NpgsqlConnectionStringBuilder
                {
                    Host = host,
                    Database = database,
                    Username = user,
                    Password = password,
                    Pooling = false,
                    ClientEncoding = "SQL_ASCII" 
                    // I also tried "UNICODE", "utf8", "win-1252"
                };

我也试过运行一个非查询命令在选择

之前改变编码
 // I tried a lot of encondings: SQL_ASCII, win-1252, unicode
 connection.Execute("set client_encoding = 'SQL_ASCII'");

 var data = connection.Query<T>(strSQL);

我无法更改数据库编码或重新创建数据库,因为该应用程序将 运行 针对大量生产数据库。

我希望没有人将这个问题标记为重复问题,因为我真的尝试用其他问题来解决,但我发现没有任何效果。

我已经为 Npgsql 添加了对非 UTF8 编码的支持。这应该只在特殊的边缘情况下使用,例如这种情况,其中数据库是用 SQL_ASCII 创建的,包含非 ASCII 字符,并且不可能更改编码。

我已将此支持反向移植到下一个补丁版本 3.1.8(看起来无害)。目前构建服务器出现了一些问题,但如果您等待几天,您应该可以在 http://myget.org/gallery/npgsql. Follow https://github.com/npgsql/npgsql/issues/392 获得 CI 3.1.8 的新支持包以获得更多 updates/progress .