Преобразовать двоичную строку в Bigint в MySQL? - PullRequest
8 голосов
/ 11 августа 2009

Я пытаюсь хэшировать строку до 64-битного значения (bigint) в MySQL. Мне известна функция MD5 (), которая возвращает 128-битный хэш в виде двоичной строки. Я был бы счастлив взять только 64-битные или младшие результаты этого результата. Однако я не могу понять, как перейти от двоичного строкового типа к числовому типу любого вида. Есть указатели?

Ответы [ 3 ]

14 голосов
/ 11 августа 2009

Используйте функцию CONV() для преобразования хэша MD5 из базы 16 в базу 10 и CAST для преобразования его в число:

select cast(conv(substring(md5(id), 1, 16), 16, 10) as unsigned integer) from SomeTable;
2 голосов
/ 11 августа 2009
CREATE FUNCTION dbo.HexStrToVarBinary(@hexstr varchar(8000))
RETURNS varbinary(8000)
AS
BEGIN 
    DECLARE @hex char(1), @i int, @place bigint, @a bigint
    SET @i = LEN(@hexstr) 

    set @place = convert(bigint,1)
    SET @a = convert(bigint, 0)

    WHILE (@i > 0 AND (substring(@hexstr, @i, 1) like '[0-9A-Fa-f]')) 
     BEGIN 
        SET @hex = SUBSTRING(@hexstr, @i, 1) 
        SET @a = @a + 
    convert(bigint, CASE WHEN @hex LIKE '[0-9]' 
         THEN CAST(@hex as int) 
         ELSE CAST(ASCII(UPPER(@hex))-55 as int) end * @place)
    set @place = @place * convert(bigint,16)
        SET @i = @i - 1

     END 

    RETURN convert(varbinary(8000),@a)
END
GO 

Источник

0 голосов
/ 14 февраля 2019

Вы также можете использовать функцию CRC32, которая возвращает 32-разрядное значение без знака.

SELECT CRC32(id) from SomeTable;

Документация

...