我正在尝试使用自己的算法加密Postgres表列。我正在从文件中读取rsa密钥并使用算法加密数据。 我的列类型是bytea。
当我尝试插入加密数据时,Postgres会出现以下错误:
pg_query():查询失败:错误:编码的字节序列无效" UTF8":0xa3
我尝试了一些设置编码的选项,如在互联网上找到但没有用。
我不知道导致此错误的原因。
答案 0 :(得分:1)
代码的显着部分包含以下几行:
var chosenAnimals = [];
chosenAnimals.push(this.state.Cat, this.state.Dog, this.state.Fish);
所以$ec = SaferCrypto::encrypt($c, $k);
可能包含此时的二进制文件。
所以其余的都是错的:
$ec
因为您试图直接在查询文本中传递二进制内容。该值必须以文本表示形式编码,以便作为文字注入查询的值子句中。
这应该使用pg_escape_bytea()
功能完成。
答案 1 :(得分:0)
问题在于您尝试将二进制数据存储在字符串(text
,character varying
,...)列中。
PostgreSQL拒绝与参数client_encoding
设置的编码不匹配的数据。如果你学习RFC 3629,你会发现在UTF-8中没有字符可以以0xa3(二进制10100011)开头。
解决方案是使用类型bytea
(字节数组)的列来存储二进制数据。