我有一个用“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"
};
我还尝试在选择之前运行非查询命令来更改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);
我无法更改数据库编码或重新创建数据库错误,应用程序将针对大量生产数据库运行。
我希望没有人将这个问题标记为重复的错误,我真的试图用其他问题来解决,但我发现没有任何问题。
我已经为Npgsql添加了对非UTF8编码的支持。这应该仅用于特殊边缘情况,例如,使用SQL_ASCII创建数据库,包含非ASCII字符,并且无法进行编码更改。
我已将这种支持向后推送到下一个补丁版本3.1.8(似乎无害)。目前在构建服务器上存在一些问题,但是如果你等待几天,你应该在http://myget.org/gallery/npgsql的新支持下获得3.1.8的CI包。 请访问https://github.com/npgsql/npgsql/issues/392以获取更多更新/进度。