Postgres列加密错误 - 编码的无效字节序列" UTF8":0xa3

时间:2016-07-25 04:56:58

标签: postgresql encryption utf-8

我正在尝试使用自己的算法加密Postgres表列。我正在从文件中读取rsa密钥并使用算法加密数据。 我的列类型是bytea。

当我尝试插入加密数据时,Postgres会出现以下错误:

  

pg_query():查询失败:错误:编码的字节序列无效" UTF8":0xa3

我尝试了一些设置编码的选项,如在互联网上找到但没有用。

我不知道导致此错误的原因。

2 个答案:

答案 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)

问题在于您尝试将二进制数据存储在字符串(textcharacter varying,...)列中。

PostgreSQL拒绝与参数client_encoding设置的编码不匹配的数据。如果你学习RFC 3629,你会发现在UTF-8中没有字符可以以0xa3(二进制10100011)开头。

解决方案是使用类型bytea(字节数组)的列来存储二进制数据。