在Python中,我编码了一个字符串,
>>> base64.b64encode('1111')
'MTExMQ=='
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试在Postgresql中对其进行解码时,我得到了十六进制值而不是原始字符串。
=# select decode('MTExMQ==', 'base64');
decode
------------
\x31313131
Run Code Online (Sandbox Code Playgroud)
如何在Postgresql中没有任何更改的情况下获取原始字符串?
Thi*_*ilo 10
您可以convert_from用来将二进制数据转换为varchar:
select convert_from(decode('MTExMQ==', 'base64'), 'UTF8')
Run Code Online (Sandbox Code Playgroud)
但是请注意,如果输入实际上是二进制数据(而不是某些文本),例如图像文件,则这可能是有损的(或失败的)。
无需在Postgresql中存储Base64编码的数据。您可以使用一种二进制列类型并直接(更紧凑)存储数据。
decode()返回一个字节数组 ( bytea) 而不是“十六进制字符串”。
您看到的格式是 a 的默认文本表示,bytea例如psql在显示bytea值时使用。其他 SQL 客户端可能会以不同的方式显示。
要将字节数组转换为可读字符串,您需要使用 encode()
select encode('\x31313131', 'base64');
Run Code Online (Sandbox Code Playgroud)
如果您更改bytea_output为escape然后将结果转换为text您可以实现相同的目标:
set bytea_output to 'escape';
select decode('MTExMQ==', 'base64')::text;
Run Code Online (Sandbox Code Playgroud)
如果您正在使用psql,则不需要演员表。
| 归档时间: |
|
| 查看次数: |
6320 次 |
| 最近记录: |