如何解决PostgreSQL中bytea的双重编码
我将二进制数据存储在一个bytea字段中,但是在导入期间将其两次转换为十六进制。如何撤消双重编码?
我的二进制文件以字符“ 0”开头。以十六进制表示的是字符30。在psql中,我希望看到以\ x30开头的字符串,因为默认情况下它将以十六进制显示给我。但是我看到的是它以\ x783330开头,其中“ 78”代表“ x”的十六进制,“ 33”代表“ 3”,“ 30”代表“ 0”。所以说存储的字符串是:x30。
我可以通过将文本强制转换为字节编码来使情况变得更糟,例如encode(data,'hex'):: bytea,然后将其转换为\ x373833333330,但我找不到找到相反方法的方法。如果我尝试解码(data :: text,'hex'),它将抱怨''不是有效的十六进制字符串。如果我使用解码(3中的substring(data :: text),'hex'),我会得到原始字符串。
解决方法
您可能以错误的方式存储了bytea
。
如果您将十六进制字符串INSERT
bytea
解释为字符串,而不是十六进制数字,除非您以\x
开头。
请参见
SELECT 'DEADBEEF'::bytea,'\xDEADBEEF'::bytea;
bytea | bytea
--------------------+------------
\x4445414442454546 | \xdeadbeef
(1 row)
使用程序插入bytea
时,也有直接插入二进制数据的方法。如何完成取决于您使用的API。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。