2016-08-25 2 views
1

"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変更する非クエリコマンドを実行しようとした私は、データベースを変更することはできませんアプリケーションを多数の本番データベースに対して実行するデータベース・シンセをエンコードまたは再作成します。

私は他の質問で解決しようとしましたが、私は見つかったものは何も見つかりませんでした。

+1

Hmm ... Npgsqlは現在UTF8を読み込み、サーバーに依存してサーバーエンコーディングからの変換を行います。言い換えれば、データベースがエンコーディングWIN1252を使用する場合、PostgreSQLはそれをUTF8に透過的に変換します。ただし、SQL-ASCIIはすべての変換を無効にする特別な「非エンコード」です。言い換えれば、WIN1252にデータがあるようですが、PostgreSQLはSQL-ASCIIを使用しているためそのことを知りません。これは悪い設定です。 –

+1

あなたのために正確に何ができるか分かりません。 Npgsqlに非UTF8エンコーディングのサポートを追加することができます。この場合、Npgsqlは指定された方法で、受信した(変換されていない)データをデコードします。これは、https://github.com/npgsql/npgsql/issues/392という問題であり、関心がないため閉鎖されています。私はその問題を再開しました。それはやりすぎるべきではありません。そこに投票を行ってください。 –

+0

ありがとうございました。しかし、私たちはnpgsqlをあきらめました。私たちはOdbcを使用しており、独自のORMを作成するホイールを再構築します。 – Murilo

答えて

2

Npgsqlに非UTF8エンコーディングのサポートを追加しました。これは、データベースがSQL_ASCIIで作成され、ASCII以外の文字が含まれており、エンコーディングの変更が不可能な特別な場合にのみ実際に使用する必要があります。

私はこのサポートを次のパッチバージョン3.1.8にバックポートしました(十分に無害なようです)。現時点ではビルドサーバーにいくつかの問題がありますが、2,3日待つと3.1.8のCIパッケージが利用可能で、新しいサポートはhttp://myget.org/gallery/npgsqlになります。更なる更新/進捗状況については、https://github.com/npgsql/npgsql/issues/392に従ってください。

+0

この機能を備えた3.1.8のCIパッケージは、https://www.myget.org/feed/npgsqlから入手できます。これはOKである必要があります。この回答を受け入れるべきです。 –

+0

mygetに3.1.8パッケージをダウンロードします。orgと私の接続文字列が追加されました:Encoding = "windows-1252"、ClientEncoding = "sql-ascii"そして今は動作しています!あまりにもありがとう@Shay – Murilo

+1

素晴らしい、それはうまくいって聞いて幸せ - 3.1.8はおそらくすぐにリリースされます。可能な限りSQL_ASCIIを避けることは、本当に良い考えです。 –

関連する問題