postgresql - 如何使用 Azure Data Studio 将转义字符串转换为 postgresql 中的 bytea(\ 不是二进制数字)
问题描述
这可能是重复的,但在很长一段时间后我一直无法真正找出如何做到这一点。
我想要做的只是往返一个二进制值。我选择它,然后将其粘贴到另一个 SQL 查询中。
IE
- 我有一个有列的表
id, data
- 我在 Azure Data Studio 中使用 postgres 扩展运行此查询:
select id, data from mytable
- 输出窗口显示了这个
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 奇怪 :-(
解决方案
使用十六进制值时,decode()
您需要使用该hex
选项并仅提供有效的十六进制数字:
decode('aab687', 'hex')
或者,您可以在十六进制值前面加上一个, \x
例如
'\xaab687'::bytea
但是,您的字符串包含无效的十六进制值,例如\x1ebd
,\x924g
并且\x87|-x
- 不确定应该是什么。
“转义”语法(例如使用E'...'
)需要八进制值,而不是十六进制数字,所以E'\xaa\xb6...
应该是E'\\252\\266...
. 使用'escape'
选项时也是如此decode()
推荐阅读
- twilio - Twilio 队列连接到错误的呼叫
- vue.js - vue v-for:在 vue i18n 中使用 switch 进行翻译
- c++ - 运行时链接器问题:“加载共享库时出错”
- c++ - 如何编写多线程 lua 脚本或让多个脚本在 C++ 程序中一起运行
- sql - 试图返回表 A 中不存在于表 B 中的值
- socket.io - socket io 中的一对一聊天
- python - 使用 Python SSH 两次
- mysql - 在 Jhipster 中将数据库从 H2 迁移到 MySql
- binance - python简单的binance bot初学者
- ios - 我如何“强制”结构中的所有属性?为了能够将它们发送到 API?