STW*_*STW 5 mysql mysql-5.5 cast
我们有一个 MySQL 5.5 数据库,其中有一个表,其中包含许多用于计算汉明距离的 64 位值。这些列被定义为BIT(64)
并使用这样的位字段文字语法填充(注意0b
前缀):
create table hash_values ( hash bit(64) );
insert into hash_values;
(0b0000000011111111000000001111111100000000111111110000000011111111)
Run Code Online (Sandbox Code Playgroud)
出于调试目的,我们需要将位值显示为由 1 和 0 组成的字符串,但只能通过看起来像一个丑陋的 hack 来做到这一点:
select conv(cast(hash as unsigned), 10, 2) hash from hash_values;
+------------------------------------------------------------------+
| hash |
+------------------------------------------------------------------+
| 0000000011111111000000001111111100000000111111110000000011111111 |
+------------------------------------------------------------------+
1 row in set (0.01 sec)
Run Code Online (Sandbox Code Playgroud)
这首先用于CAST()
获取整数表示;然后使用该CONV()
方法将其从 base-10 转换回 base-2。它似乎有效,但我觉得我们忽略了一种将位值转换为 base-2 字符串的简单方法。
您也可以使用BIN()
函数。LPAD()
不过,您仍然必须这样做,不会显示高阶 0:
LPAD(BIN(hash), 64, '0')
Run Code Online (Sandbox Code Playgroud)