2016-07-25 204 views
0

我想用我自己的算法加密Postgres表列。我從文件讀取rsa密鑰並使用算法對數據進行加密。 我的列類型是bytea。Postgres列加密錯誤 - 用於編碼「UTF8」的無效字節序列:0xa3

當我嘗試插入加密數據Postgres的提供了以下錯誤:

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

我試過幾個選項設置編碼互聯網上的發現,但沒有奏效。

我不知道是什麼導致了這個錯誤。

回答

0

問題是,您嘗試將二進制數據存儲在字符串(text,character 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()); 

因爲你想通過二進制內容直接在查詢的文本。該值必須以文本表示形式編碼,以便作爲文字注入查詢的值子句中。

這應該用pg_escape_bytea()函數完成。

+0

非常感謝你.. pg_escape_bytea()工作..! –

相關問題