代码之家  ›  专栏  ›  技术社区  ›  Sean Owen

在MySQL中将二进制字符串转换为bigint?

  •  8
  • Sean Owen  · 技术社区  · 15 年前

    我正在尝试将字符串散列为MySQL中的64位值(bigint)。我知道md5()函数,它将128位散列作为二进制字符串返回。我很乐意接受这个结果的最下面或最上面的64位。但是,我无法理解如何从二进制字符串类型转换为任何类型的数字类型。有什么指针吗?

    3 回复  |  直到 6 年前
        1
  •  14
  •   Ken Keenan    9 年前

    使用 CONV() 函数将MD5哈希从基16转换为基10,然后 CAST 要将其转换为数字:

    select cast(conv(substring(md5(id), 1, 16), 16, 10) as unsigned integer) from SomeTable;
    
        2
  •  2
  •   Max    15 年前
    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 
    

    Source

        3
  •  0
  •   Łukasz Å»arczyński    6 年前

    你也可以用 CRC32 返回32位无符号值的函数。

    SELECT CRC32(id) from SomeTable;
    

    Documentation