如何从 MySQL 中的 BLOB 列中提取十六进制值

Bar*_*t V 1 mysql hex blob extract

我正在尝试从以单精度 32 位十六进制编写的BLOB 列中提取浮点值。为了更详细地说明,我在下面构建了类似于我正在使用的 Mysql-db 的示例:即,一个包含值 '42f00000' 的 BLOB 列的表。目标是拥有一个从中提取值“120”的函数。

示例数据集将是:

CREATE TABLE MyTable (FirstColumn BLOB);

INSERT INTO MyTable (FirstColumn) VALUES (0x42f00000); #Representing value 120 in single-precision 32bit Hex

SELECT *
FROM MyTable;
Run Code Online (Sandbox Code Playgroud)

后者 'SELECT *' 的输出是这样的: 在此处输入图片说明

我很难编写一个可以为整个列执行此操作的函数。我尝试了我在互联网上找到的但没有成功:即,

SELECT UNHEX(FirstColumn)
FROM MyTable;
## NULL-result

SELECT CONV(FirstColumn, 10,16)
FROM MyTable;
## 0 as result
Run Code Online (Sandbox Code Playgroud)

希望有人有类似的经历吗?

Bar*_*t V 5

我能够做到第一步;即从 BLOB 中提取十六进制值。

SELECT CONCAT("0x",HEX(CAST(FirstColumn AS CHAR(10000) CHARACTER SET utf8)))
FROM MyTable;
Run Code Online (Sandbox Code Playgroud)

此代码以字符串形式返回“0x42F00000”

下一步是通过单精度转换(不是 ASCI)将这个 HEX 值(它是一个字符串)解码为浮点数。类似于这种类型的转换:https : //www.h-schmidt.net/FloatConverter/IEEE754.html

有任何想法吗?