【问题标题】:Select few bytes from BLOB and convert them to integer in MySQL从 BLOB 中选择几个字节并在 MySQL 中将它们转换为整数
【发布时间】: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

标签: mysql blob


【解决方案1】:

假设列c1BLOB 类型,其中数据存储为HEX

下面的sql会将c1BLOB类型转换为INT

select CONV(HEX(c1), 16, 10) from table_name;

【讨论】:

    猜你喜欢
    • 2023-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-20
    相关资源
    最近更新 更多