在MySQL中使用二进制数据

时间:2011-02-09 17:03:44

标签: mysql varbinary

SELECT 
      0x0000987C As col1,
      substr(BinaryData,1,4) As col2,
      CAST(0x0000987C  AS SIGNED) As col3,
      CAST(substr(BinaryData,1,4)  AS SIGNED) As col4
FROM
(
SELECT 0x0000987C00000000 AS BinaryData
) d

返回

col1  col2   col3  col4
----  ----  -----  ----
BLOB  BLOB  39036   0

当我查看col1col2的BLOB查看器时,它们看起来都相同(截图如下)。

为什么col3和col4的结果不同?

Screenshot

1 个答案:

答案 0 :(得分:1)

我认为它与数据类型有关。 BinaryData具有整数数据类型,但substr(BinaryData,1,4)需要一个字符串。 CAST然后与结果混淆。此外,CAST使用基数10解析字符串,因此您需要进行一些额外的工作。试试这个:

CAST(CONV(substr(HEX(BinaryData),1,8), 16, 10)  AS SIGNED) As col4

这是一个怪物,但它应该给你你想要的东西。