Работа с двоичными данными в MySQL - PullRequest
2 голосов
/ 09 февраля 2011
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

Когда я смотрю на просмотрщик BLOB для col1 и col2, они оба выглядят одинаково (скриншот ниже).

Так почему разныерезультаты для col3 и col4?

Screenshot

1 Ответ

1 голос
/ 09 февраля 2011

Я думаю, что это связано с типами данных.BinaryData имеет целочисленный тип данных, но substr (BinaryData, 1,4) ожидает строку.CAST тогда путается с результатом.Кроме того, CAST анализирует строки, используя базу 10, поэтому вам нужно немного дополнительной работы.Попробуйте это:

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

Это монстр, но он должен дать вам то, что вы хотите.

...