我在mysql表中有以下字段:
bitmap varbinary(256)
我想在此字段上执行按位AND。我试过了:
select id, Hex(bitmap) from mytable;
| 735 | 1D1BA8284000000000000000000000000000000000000000000000000000000000 |
| 736 | 1D1BACA80000000000000000000000000000000000000000000000000000000000 |
select Hex(bitmap & 0xFFFFFFFFF000000000000000000000000000000000000000000000000000000000) from mytable
| 735 | 0 |
| 736 | 0 |
Mysql总是给0,即使那时我的列也是非零的
答案 0 :(得分:2)
MySQL不支持整个varbinary()
字段的按位运算。
来自the manual:
MySQL使用BIGINT(64位)算法进行位操作,因此这些运算符的最大范围为64位。
你可能能够一次对单个字节执行操作,方法是用substr()
然后concat
提取它们,结果包含最初包装字节的剩余字节感兴趣,即
SELECT CHAR(ASCII(SUBSTR(bitmap, 1, 1)) & 0xff || SUBSTR(bitmap, 2)
显然这不能很好地扩展......