我试图使用自己的算法加密Postgres表列。我从文件中读取rsa密钥,并使用算法加密数据。我的专栏类型是旁白。
当我尝试插入加密数据时,Postgres会给出以下错误:
pg_query():查询失败:错误:编码"UTF8":0xa3的无效字节序列
我尝试了几个选项,设置编码在互联网上找到,但没有工作。
我不知道是什么导致了这个错误。
发布于 2016-07-25 19:41:57
代码的突出部分由以下几行组成:
$ec = SaferCrypto::encrypt($c, $k);因此,在这一点上,$ec大概包含二进制。所以剩下的都是错的:
$query = "INSERT into enc_test values('$ec')";
$result = pg_query($query) or die('Query failed: ' . pg_last_error());因为您试图在查询的文本中直接传递二进制内容。必须将该值编码在文本表示中,才能将其作为文字注入查询的value子句中。
这应该用pg_escape_bytea()函数来完成。
发布于 2016-07-25 06:34:23
问题在于,您正在尝试将二进制数据存储在字符串中(text、character varying、…)。列。
PostgreSQL拒绝与参数client_encoding设置的编码不匹配的数据。如果你学习RFC 3629,你会发现在UTF-8中没有一个字符可以从0xa 3(二进制10100011)开始。
解决方案是使用bytea (字节数组)类型的列来存储二进制数据。
https://stackoverflow.com/questions/38559986
复制相似问题