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 中模拟的行为。
您可以使用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)
| 归档时间: |
|
| 查看次数: |
414 次 |
| 最近记录: |