2016-07-25 17 views
0

私自身のアルゴリズムを使用してPostgresテーブルのカラムを暗号化しようとしています。私はファイルからrsaキーを読み取り、アルゴリズムを使用してデータを暗号化しています。 私のカラムタイプはbyteaです。Postgresカラムの暗号化エラー - "UTF8"をエンコードするための無効なバイトシーケンス:0xa3

私は暗号化されたデータを挿入しようとするとPostgresは次のエラーを与える:

pg_query(): Query failed: ERROR: invalid byte sequence for encoding "UTF8": 0xa3

は、私はインターネット上で見られるようなエンコーディングを設定するいくつかのオプションを試みたが、うまくいきませんでした。

このエラーの原因はわかりません。

答えて

0

問題は、バイナリデータを文字列(textcharacter varying、…)の列に格納しようとしていることです。

PostgreSQLは、パラメータclient_encodingで設定されたエンコーディングと一致しないデータを拒否します。 RFC 3629を調べると、UTF-8で0xa3(バイナリ10100011)で始まる文字はありません。

解決策は、バイナリデータを格納するためにタイプbytea(バイト配列)の列を使用することです。

+0

私はbyteaカラム型を使用しています。 –

+0

完全な挿入文とテーブル定義を表示できますか? –

0

あなたのコードの凸部は、これらの線で構成されています:

$ec = SaferCrypto::encrypt($c, $k); 

だから$ecおそらくこの時点でのバイナリが含まれています。 そしてそう残りは間違っている:

$query = "INSERT into enc_test values('$ec')"; 
$result = pg_query($query) or die('Query failed: ' . pg_last_error()); 

クエリのテキストに直接バイナリコンテンツを渡すためにしようとしているので。値は、リテラルとして照会のvalues節に挿入されるように、テキスト表現でエンコードされなければなりません。

これは、pg_escape_bytea()機能で行う必要があります。

+0

ありがとうございました.. pg_escape_bytea()was worked .. !! –

関連する問題