你如何将一个整数转换成它的 CONDENSED 二进制等价物,例如 MySQL 中的 BINARY(3)

Gif*_*guy 0 mysql sql binary type-conversion data-conversion

我正在执行散列操作,我需要一致、准确、高效地附加原始字节等。
我不能乱用 ASCII 编码的数字字符串,我只需要获取原始字节。

MySQL 的转换函数非常混乱,并且不会产生对像我这样的 SQL Server 人员来说显而易见的结果。

例如,BINARY 123456生成 6 个字符的 ASCII 编码字符串,而不是看似明显的BINARY ( 3 )字符串00000001 11100010 01000000aka0x01E240

到目前为止,我可以获得正确转换的唯一方法是分配一个十六进制文字 - 这在运行时显然是不切实际的。

SET @int_value = 123456 ;   -- Decimal value

SET @hex_value = 0x01E240 ; -- The same value, in hexadecimal,
                            -- 6 hex digits = 3 bytes

SELECT LENGTH ( BINARY @int_value ) , LENGTH ( BINARY @hex_value ) , LENGTH ( BINARY HEX ( @int_value ) ) ;
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

那么在这个例子中,我如何将一个整数值(例如DECLARE'd 整数变量或整数列)123456转换为 3 个字节的字符串?

编辑:
根据评论中的要求,默认情况下 SQL-Server 会产生所需的结果:

在此处输入图片说明

这是我需要在 MySQL 中模拟的行为。

Pau*_*gel 5

您可以使用HEX()生成一个带有整数的十六进制表示的字符串。然后UNHEX()将该字符串转换为二进制值:

SET @int_value = 123456;   -- Decimal value

SET @bin_value = UNHEX(HEX(@int_value));

SELECT @int_value, HEX(@bin_value), LENGTH(@bin_value);
Run Code Online (Sandbox Code Playgroud)

结果是

@int_value | HEX(@bin_value) | LENGTH(@bin_value)
-----------|-----------------|-------------------
    123456 |          01E240 |                  3
Run Code Online (Sandbox Code Playgroud)

请参阅db<>fiddle 上的演示