首页 > 解决方案 > 如何使用 Azure Data Studio 将转义字符串转换为 postgresql 中的 bytea(\ 不是二进制数字)

问题描述

这可能是重复的,但在很长一段时间后我一直无法真正找出如何做到这一点。

我想要做的只是往返一个二进制值。我选择它,然后将其粘贴到另一个 SQL 查询中。

IE

id  data
58  b'\xaa\xb6\x87|-x\xf6\xd1\x80\xec\xd2\xed\x91\x1ebd\x924g\xcd\xaeVZ\x01\xf2\xa0\xb3\xd8\x16\xe1fC'

现在我正在尝试做第二个查询,我计算与那个匹配的东西。

select count(*) from mytable where data = b'\xaa\xb6\x87|-x\xf6\xd1\x80\xec\xd2\xed\x91\x1ebd\x924g\xcd\xaeVZ\x01\xf2\xa0\xb3\xd8\x16\xe1fC'

我收到错误消息“\”不是有效的二进制数字

我发现的大多数文档和其他东西似乎都建议使用E'...'::bytea语法,所以我这样做:

select count(*) from mytable where data = E'\xaa\xb6\x87|-x\xf6\xd1\x80\xec\xd2\xed\x91\x1ebd\x924g\xcd\xaeVZ\x01\xf2\xa0\xb3\xd8\x16\xe1fC'::bytea

我收到错误消息invalid byte sequence for encoding "UTF8": 0xaa

我已经尝试过该decode功能,因为其他事情表明:

select count(*) from mytable where data = decode('\xaa\xb6\x87|-x\xf6\xd1\x80\xec\xd2\xed\x91\x1ebd\x924g\xcd\xaeVZ\x01\xf2\xa0\xb3\xd8\x16\xe1fC', 'escape')

并且失败,错误类型为 bytea 的输入语法无效

为什么二进制数据的输出格式不是有效的输入格式?希望这不仅仅是 Azure Data Studio 奇怪 :-(

标签: postgresqlbyteaazure-data-studio

解决方案


使用十六进制值时,decode()您需要使用该hex选项并仅提供有效的十六进制数字:

decode('aab687', 'hex')

或者,您可以在十六进制值前面加上一个 \x例如

'\xaab687'::bytea

但是,您的字符串包含无效的十六进制值,例如\x1ebd\x924g并且\x87|-x- 不确定应该是什么。

“转义”语法(例如使用E'...')需要八进制,而不是十六进制数字,所以E'\xaa\xb6...应该是E'\\252\\266.... 使用'escape'选项时也是如此decode()


推荐阅读