如何将PostgreSQL的转义字节a转换为十六进制字节a?[英] How to convert PostgreSQL escape bytea to hex bytea?

本文是小编为大家收集整理的关于如何将PostgreSQL的转义字节a转换为十六进制字节a?的处理方法,想解了如何将PostgreSQL的转义字节a转换为十六进制字节a?的问题怎么解决?如何将PostgreSQL的转义字节a转换为十六进制字节a?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我得到了答案来检查 PostgreSQL 文本列中的某个 BOM.我真正喜欢做的是有一些更通用的东西,即像

select decode(replace(textColumn, '\\', '\\\\'), 'escape') from tableXY;

UTF8 BOM 的结果是:

\357\273\277

哪个是八进制bytea,可以在pgadmin中切换bytea的输出来转换:

update pg_settings set setting = 'hex' WHERE name = 'bytea_output';
select '\357\273\277'::bytea

结果是:

\xefbbbf

我想要的是这个结果作为一个查询,例如

update pg_settings set setting = 'hex' WHERE name = 'bytea_output';
select decode(replace(textColumn, '\\', '\\\\'), 'escape') from tableXY;

但这不起作用.结果为空,可能是因为解码无法处理十六进制输出.

推荐答案

如果最终目的是获取构成 textColumn 中字符串的所有字节的十六进制表示,则可以这样做:

SELECT encode(convert_to(textColumn, 'UTF-8'), 'hex') from tableXY;

它不依赖于bytea_output.顺便说一句,此设置仅在查询的最后阶段起作用,当结果列的类型为 bytea 并且必须以文本格式返回给客户端时(这是最常见的情况,也是 pgAdmin 所做的).这是表示的问题,表示的实际值(字节序列)是相同的.

在上面的查询中,结果是 text 类型的,所以无论如何这无关紧要.

我认为您使用 decode(..., 'escape') 的查询无法正常工作,因为该参数应该以 escape 格式编码,但不是,根据评论,它是普通的 xml 字符串.

本文地址:https://www.itbaoku.cn/post/1764058.html

相关标签/搜索