与mysql中的varbinary(255)按位AND / OR

时间:2011-08-11 06:12:10

标签: mysql varbinary

我在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,即使那时我的列也是非零的

1 个答案:

答案 0 :(得分:2)

MySQL不支持整个varbinary()字段的按位运算。

来自the manual

  

MySQL使用BIGINT(64位)算法进行位操作,因此这些运算符的最大范围为64位。

可能能够一次对单个字节执行操作,方法是用substr()然后concat提取它们,结果包含最初包装字节的剩余字节感兴趣,即

SELECT CHAR(ASCII(SUBSTR(bitmap, 1, 1)) & 0xff || SUBSTR(bitmap, 2)

显然这不能很好地扩展......