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

时间:2016-08-25 12:19:08

标签: c# postgresql encoding dapper npgsql

我有一个用“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"
                };

我还尝试在选择

之前运行非查询命令来更改enconding
 // I tried a lot of encondings: SQL_ASCII, win-1252, unicode
 connection.Execute("set client_encoding = 'SQL_ASCII'");

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

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

我希望没有人将这个问题标记为重复的错误我真的试图用其他问题来解决,但我找不到任何问题。

1 个答案:

答案 0 :(得分:2)

我已经为Npgsql添加了对非UTF8编码的支持。这应该只用于特殊边缘情况,例如,使用SQL_ASCII创建数据库,包含非ASCII字符,并且无法进行编码更改。

我已将这种支持向后推送到下一个补丁版本3.1.8(似乎无害)。目前构建服务器存在一些问题,但如果您等待几天,您应该在http://myget.org/gallery/npgsql的新支持中获得3.1.8的CI包。关注https://github.com/npgsql/npgsql/issues/392以获取更多更新/进展。