0

我在 mysql 表中有以下字段:

bitmap  varbinary(256)

我想在这个字段上执行按位与。我试过:

select id, Hex(bitmap) from mytable;
| 735 | 1D1BA8284000000000000000000000000000000000000000000000000000000000 |
| 736 | 1D1BACA80000000000000000000000000000000000000000000000000000000000 |

select Hex(bitmap & 0xFFFFFFFFF000000000000000000000000000000000000000000000000000000000) from mytable

| 735 | 0                                                                                       |
| 736 | 0                                                                                       |

即使我的列不为零,Mysql 也总是给出 0

4

1 回答 1

2

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

手册

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

可以通过提取它们一次对单个字节执行操作,substr()然后concat将结果与最初包装感兴趣字节的剩余字节一起提取,即

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

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

于 2011-08-11T06:23:37.707 回答