在Python中,我编码了一个字符串,
>>> base64.b64encode('1111')
'MTExMQ=='
现在当我尝试在Postgresql中解码它时,我得到的是Hex值而不是原始字符串。
=# select decode('MTExMQ==', 'base64');
decode
------------
\x31313131
如何在Postgresql中没有任何更改的情况下获取原始字符串?
答案 0 :(得分:6)
您可以使用convert_from
将二进制数据转换为varchar:
select convert_from(decode('MTExMQ==', 'base64'), 'UTF8')
但请注意,如果输入实际上是二进制数据(而不是某些文本),例如图像文件,则这可能是有损的(或失败)。
不需要在Postgresql中存储Base64编码的数据。您可以使用其中一种二进制列类型并直接存储数据(更紧凑)。
答案 1 :(得分:2)
decode()
返回一个字节数组(bytea
)而不是"十六进制字符串"。
您看到的格式是bytea
的{{3}},例如psql
显示bytea
值时使用的值。其他SQL客户端可能以不同方式显示。
要将字节数组转换为可读字符串,您需要使用encode()
select encode('\x31313131', 'base64');
如果您将bytea_output
更改为escape
,然后将结果转换为text
,您可以实现相同的目标:
set bytea_output to 'escape';
select decode('MTExMQ==', 'base64')::text;
如果您使用psql
,则不需要演员。