Postgresql Postgres SQL从字符串字段读取二进制值?

Postgresql Postgres SQL从字符串字段读取二进制值?,postgresql,Postgresql,我在Postgres数据库中有一个类型为varchar的列,但其中存储了一个二进制值。 如何以我可以读取的方式返回列的二进制值 例如,当我在列中看到“r”时,我想看到组成r值的1和0 更清楚地知道我想要什么。 我认为该应用程序正在以二进制形式存储有关勾选复选框的数据。 因此,对于一组复选框: 未选中(0) 核对(1) 核对(1) 核对(1) 未选中(0) 未选中(0) 核对(1) 未选中(0) 它存储值“r”,我想查看存储的值的二进制或十六进制。因此,对于值“r”,我想使用varchar获

我在Postgres数据库中有一个类型为varchar的列,但其中存储了一个二进制值。 如何以我可以读取的方式返回列的二进制值

例如,当我在列中看到“r”时,我想看到组成r值的1和0


更清楚地知道我想要什么。 我认为该应用程序正在以二进制形式存储有关勾选复选框的数据。 因此,对于一组复选框:

  • 未选中(0)
  • 核对(1)
  • 核对(1)
  • 核对(1)
  • 未选中(0)
  • 未选中(0)
  • 核对(1)
  • 未选中(0)

它存储值“r”,我想查看存储的值的二进制或十六进制。因此,对于值“r”,我想使用
varchar
获得十六进制值“72”或二进制值“01110010”

,因为这是个坏主意。例如,不能以这种方式存储零字节

无论如何,您的问题的答案应该是简单的类型转换:

CAST(textcol AS bytea)

在文本列中存储二进制数据不是一个好主意。您可以使用bytea类型,例如:

drop table if exists my_table;
create table my_table(id serial primary key, switch bytea);
insert into my_table (switch) values
('\x7272'),
('\x1111'),
('\xffff');
您可以轻松设置和获取十六进制格式的值,将其转换为位字符串,获取/设置单个字节/位,例如:

select id, 
    switch,
    right(switch::text, -1)::bit(16) as bits, 
    right(switch::text, -1)::bit(16)::int as int,
    get_byte(switch, 0)
from my_table;

 id | switch |       bits       |  int  | get_byte 
----+--------+------------------+-------+----------
  1 | \x7272 | 0111001001110010 | 29298 |      114
  2 | \x1111 | 0001000100010001 |  4369 |       17
  3 | \xffff | 1111111111111111 | 65535 |      255
(3 rows)    
您可以将
text
varchar
)强制转换为
bytea

select 'r'::bytea;

 bytea 
-------
 \x72
(1 row) 
请注意,在某些工具(如PgAdmin III)中,应设置参数以获得十六进制输出:

set bytea_output to hex;
根据文件:

输出格式取决于配置参数bytea_output;默认值为十六进制。(注意,十六进制格式是在PostgreSQL 9.0中引入的;早期版本和一些工具不理解它。)

另请阅读文档:


这更改了数据类型,但没有更改它对我的显示方式。然后尝试将
bytea
强制转换为
bit variable
。如果
textcol
包含反斜杠,则此操作无效。@cstork将反斜杠加倍是否有帮助?是的,完全正确。;-)我刚刚遇到了这个问题,也许你知道一种不用这个难看的
replace(textcol,'\','\\')来解决这个问题的方法。
绕道?在我看来,不知何故,必须能够访问
textcol
的二进制表示形式,而不必首先转换整个字符串来接收您刚开始使用的内容,而是键入
bytea
。有什么想法吗?