我有一张这样的表:
// mytable
+---------+-------------+
| id | bitmap |
+---------+-------------+
| int(11) | BIT(10) |
+---------+-------------+
| 1 | 01111111000 |
| 2 | 01111111111 |
| 3 | 00000000001 |
+---------+-------------+
这些是当前和预期产出的一些例子:
例1:
SELECT bitmap INTO @var FROM mytable WHERE id = 1;
SELECT @var;
/* Current output: 1016
Expected output: 01111111000
*/
例2:
SELECT bitmap INTO @var FROM mytable WHERE id = 2;
SELECT @var;
/* Current output: 1023
Expected output: 01111111111
*/
示例3:
SELECT bitmap INTO @var FROM mytable WHERE id = 3;
SELECT @var;
/* Current output: 1
Expected output: 00000000001
*/
那我该怎么做?如您所见,我尝试将该列的原始位值分配给该变量(但似乎有转换,我该如何避免?)。我真的不知道@var
为什么不包含二进制值。
答案 0 :(得分:0)
您可以使用bitmap
函数将@var
列值的二进制表示形式提供给CONV(N,from_base,to_base)
。
SELECT CONV(bitmap,2,2) INTO @var FROM mytable WHERE id = 1;
SELECT @var;
注意:强>
CONV()函数
MySQL CONV()
将一个数字从一个数字基数系统转换为另一个数字基数系统。转换后,函数返回数字的字符串表示。
如果定义的参数为NULL
,则返回值为NULL
。
最小基数为2,最大基数为36.如果要转换的基数为负数,则该数字被视为带符号数。否则,它被视为无符号。
语法:
CONV(num , from_base , to_base );
<强>参数强>
Name Description
num A number.
from_base Existing base of the number num.
to_base Base of the number num after conversion.