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

How do you convert an integer into its CONDENSED binary equivalent e.g. BINARY(3) in MySQL

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

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

例如,BINARY 123456 生成一个包含 6 个字符的 ASCII 编码字符串,而不是看似明显的 BINARY ( 3 ) 字符串 00000001 11100010 01000000 又名 0x01E240

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

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 ) ) ;

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

编辑:
根据评论中的要求,SQL-服务器默认生成所需的结果:

这是我需要在 MySQL 中效仿的行为。

您可以使用 HEX() to generate a string with a hexadecimal representation of your integer. Then UNHEX() 将该字符串转换为二进制值:

SET @int_value = 123456;   -- Decimal value

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

SELECT @int_value, HEX(@bin_value), LENGTH(@bin_value);

结果

@int_value | HEX(@bin_value) | LENGTH(@bin_value)
-----------|-----------------|-------------------
    123456 |          01E240 |                  3

demo on db<>fiddle