微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PostgreSQL中bytea的双重编码

如何解决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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?