无法在"葡萄牙"数据库上使用NPGSQL选择一些行[英] Cannot select some rows with npgsql on a "Portuguese" database

本文是小编为大家收集整理的关于无法在"葡萄牙"数据库上使用NPGSQL选择一些行的处理方法,想解了无法在"葡萄牙"数据库上使用NPGSQL选择一些行的问题怎么解决?无法在"葡萄牙"数据库上使用NPGSQL选择一些行问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我有一个使用" SQL_ASCII"和模板" Template0"创建的PostgreSQL数据库.它在葡萄牙拥有数据,因此我有"não","feijão","avô"之类的数据.当我尝试检索具有此类字符的行时,它不起作用,否则可行.

错误:

  • "错误解析第6列(sempresa = 0 -string)"}
  • 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"
                };

我还试图在选择

之前运行一个非Query命令以更改包含
 // I tried a lot of encondings: SQL_ASCII, win-1252, unicode
 connection.Execute("set client_encoding = 'SQL_ASCII'");

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

我无法更改编码数据库或重新创建数据库SINSE应用程序将在许多生产数据库中运行.

我希望没有人会提出这个问题,因为我真的试图解决其他问题,但我发现没有任何问题.

推荐答案

我已经在NPGSQL中添加了对非UTF8编码的支持.这实际上只能在诸如此类的特殊边缘案例中使用,其中数据库是使用SQL_ASCII创建的,包含非ASCII字符,而编码更改是不可能的.

我已经将此支持备份到下一个补丁版本3.1.8(似乎无害).目前,构建服务器有一些麻烦,但是如果您等待几天,则应在 http://myget.org/gallery/npgsql .请注意 https://github.com/npgsql/npgsql/npgsql/npgsql/sissues/392 以获取更多更新/进度.

本文地址:https://www.itbaoku.cn/post/1764184.html