当前位置: 首页 > 面试题库 >

将十六进制文本字符串作为bytea插入PostgreSQL

苏鸿才
2023-03-14
问题内容

我有一个文本文件,其中包含多个十六进制字符串:

013d7d16d7ad4fefb61bd95b765c8ceb
007687fc64b746569616414b78c81ef1

我想将这些作为 BYtea (而不是 varchar) 存储在数据库中。也就是说,我希望数据库将01存储为单字节00000001,而不是字符“
0”和“ 1”。

我可以通过sed轻松运行此文件,以任何需要的方式对其进行格式化/转义。

这是我尝试过的:

create table mytable (testcol BYTEA);

这有效:

insert into mytable (testcol) values (E'\x7f\x7f');

但是,一旦我有一个高于\ x7f的字节,就会出现此错误:

insert into mytable (testcol) values (E'\x7f\x80');
ERROR:  invalid byte sequence for encoding "UTF8": 0x80

有什么想法,还是我处理错误的方法?


问题答案:

您可以使用decode函数将十六进制html" target="_blank">字符串转换为bytea (其中“ encoding”表示将二进制值编码为某些文本值)。例如:

select decode('DEADBEEF', 'hex');
      decode      
------------------
 \336\255\276\357

9.0的默认输出更容易理解:

   decode   
------------
 \xdeadbeef

您不能只说这E'\xDE\xAD\xBE\xEF'是因为它是为了生成文本值,而不是字节数,因此Postgresql会尝试将其从客户端编码转换为数据库编码。您可以这样编写bytea转义格式,但需要将反斜杠加倍:E'\\336\\255\\276\\357'::bytea。我想您可以理解为什么更改了BYTEA格式。…恕我直言,该decode()功能是一种合理的输入输入方式,即使其中涉及一些开销。



 类似资料:
  • 问题内容: 我在ex中有整数。16,我正在尝试将此数字转换为十六进制数字。我试图通过使用十六进制函数来实现此目的,但是每当您向十六进制函数提供整数时,它都会返回十六进制数字的字符串表示形式, 有人可以告诉我如何将字符串格式的十六进制数字转换为简单的十六进制数字。 谢谢!! 问题答案:

  • 问题内容: 我想将十六进制字符串转换为二进制字符串。例如,十六进制2是0010。下面是代码: 但是,这仅适用于十六进制0-9;它不适用于十六进制A-F,因为它使用。谁能增强它? 问题答案: 您需要告诉Java int是十六进制的,如下所示:

  • 问题内容: 要将String转换为十六进制,我正在使用: 在此处投票最高的答案中对此进行了概述:在Java中将 字符串转换为十六进制 我该如何反向执行,即将十六进制转换为字符串? 问题答案: 您可以从转换后的字符串中进行重构,这是一种实现方法: 另一种方法是使用,从包: 单元测试以验证: 注:领先剥离的仅仅是必要的,因为的你的填充方法。如果您不介意将其替换为简单的,则可以将此行放在:

  • 问题内容: 是否有任何(至少整数)数字以本机Swift方式在字符串中获取其十六进制表示形式?反之。它一定不能使用Foundation。例如,String类具有一个函数 它将代表整数的字符串转换为其Int值。我正在寻找类似的东西,使用十六进制字符串。我知道这很容易实现,但是如果Swift已经有了,那就更好了。否则,如果您已经对String和Int进行了扩展以实现以下目的: 我知道这不是火箭科学,但以

  • 问题内容: 我写了一些代码将十六进制显示字符串转换为十进制整数。但是,当输入类似100a或625b(带有字母的东西)时,我得到了这样的错误: java.lang.NumberFormatException:对于输入字符串:java.lang.Integer.parseInt(未知源)处的java.lang.NumberFormatException.forInputString(未知源)处为“ 1

  • 我正在写一个Rust程序,读取I2C总线并保存数据。当我读取I2C总线时,我会得到十六进制值,比如,,等等。 现在,我只能将其作为字符串处理并按原样保存。有没有办法把它解析成一个整数?它有内置的功能吗?