【发布时间】:2021-06-25 17:53:38
【问题描述】:
我有一个包含 7200 字节的 BLOB 字段的表。
CREATE TABLE `data`
(
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`metric_id` int(11) DEFAULT NULL,
`ts` date DEFAULT NULL,
`values` mediumblob,
PRIMARY KEY (`id`)
)
我使用它来存储在一小时内每秒收集的一些值,以减少大型数据库中的行数。在我用 C# 处理我的 BLOB-s 的应用程序中一切正常,但在 MySQL 查询中查看数据时遇到问题。
例如 - 我想选择前 2 个字节并将它们(在 MySQL Workbench 中)显示为无符号整数。
我该怎么做?
到目前为止,我已经尝试过:
SELECT *, cast(substring(`values`, 1, 2) as INTEGER) FROM gs.data limit 10
还有这个:
SELECT *, convert(substring(`values`, 1, 2), INTEGER) FROM gs.data limit 10
但它总是返回 0。
【问题讨论】:
-
提供带有
SHOW CREATE TABLE gs.data的表结构,并提供一些示例数据作为ascii表数据或提供一个sqlfiddle.com..还发布一个ascii表,它的结果是你期望的。 -
Blob 数据是十六进制的,所以我认为你需要使用 MySQL 的函数
UNHEX()-> dev.mysql.com/doc/refman/5.7/en/…。 -
@RaymondNijland 好吧,
UNHEX没用,我试过HEX并且有效。conv(HEX(substring(values, 1, 2)), 16, 10) -
@RaymondNijland 您可以将此作为答案发布。
-
INTEGER在 MySQL 中不是有效的转换数据类型。你可能想要UNSIGNED