"SQL_ASCII"とtemplate "template0"で作成されたpostgresqlデータベースがあります。それはポルトガル語でデータを保持するので、 "Não"、 "Feijão"、 "Avô"などのデータがあります。私はこれらの種類の文字 "〜^"を持つ行を取得しようとすると動作しません。そうでなければ動作します。"ポルトガル"データベースでnpgsqlでいくつかの行を選択できません
エラー:
- "エラー解析カラム6(sempresa = 0 - 文字列)、" =「はユニコードに指定されたコードページのインデックス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);
を選択する前にenconding変更する非クエリコマンドを実行しようとした私は、データベースを変更することはできませんアプリケーションを多数の本番データベースに対して実行するデータベース・シンセをエンコードまたは再作成します。
私は他の質問で解決しようとしましたが、私は見つかったものは何も見つかりませんでした。
Hmm ... Npgsqlは現在UTF8を読み込み、サーバーに依存してサーバーエンコーディングからの変換を行います。言い換えれば、データベースがエンコーディングWIN1252を使用する場合、PostgreSQLはそれをUTF8に透過的に変換します。ただし、SQL-ASCIIはすべての変換を無効にする特別な「非エンコード」です。言い換えれば、WIN1252にデータがあるようですが、PostgreSQLはSQL-ASCIIを使用しているためそのことを知りません。これは悪い設定です。 –
あなたのために正確に何ができるか分かりません。 Npgsqlに非UTF8エンコーディングのサポートを追加することができます。この場合、Npgsqlは指定された方法で、受信した(変換されていない)データをデコードします。これは、https://github.com/npgsql/npgsql/issues/392という問題であり、関心がないため閉鎖されています。私はその問題を再開しました。それはやりすぎるべきではありません。そこに投票を行ってください。 –
ありがとうございました。しかし、私たちはnpgsqlをあきらめました。私たちはOdbcを使用しており、独自のORMを作成するホイールを再構築します。 – Murilo