你如何将一个整数转换成它的 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
我正在执行散列运算,我需要一致、准确、高效地附加原始字节等。
我不能乱用 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