繁体   English   中英

无法在“葡萄牙语”数据库上使用npgsql选择某些行

[英]Cannot select some rows with npgsql on a “Portuguese” database

我有一个使用“ SQL_ASCII”和模板“ template0”创建的PostgreSQL数据库。 它以葡萄牙语保存数据,因此我拥有诸如“Não”,“Feijão”,“Avô”之类的数据。 当我尝试检索具有此类字符“〜^”的行时,它将不起作用,否则它将起作用。

错误:

  • “错误分析第6列(sempresa = 0-字符串)”}
  • Message =“无法转换为Unicode指定的代码页的索引0中的字节[C3]。”

我正在使用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上获得带有新支持的3.1.8 CI包。 请关注https://github.com/npgsql/npgsql/issues/392,以获取更多更新/进展。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM