MySQL在WHERE语句中逐位返回奇数结果

时间:2016-08-19 14:12:06

标签: php mysql bitwise-operators

我在MySQL数据库中有一个BLOB字段,其中包含一个七位二进制字段 - 本质上,一周中每天的一位,从右手位的星期日开始。

我有两个记录,一个是二进制字段(称为Flags)设置为0101000而另一个设置为0000010.我在Mac上使用Querious软件进行数据库工作,这表明该字段确实包含二进制数据并确认以上条目。

但是,当我发出一个SELECT语句时,包括Flags&在WHERE语句中8 = 8,两个记录都被返回,但我相信只有第一个记录。

使用bindec的PHP代码($ data-> flags)& 8正确地仅将第一个记录标记为设置了第4位(即值8)。

任何人都可以告诉我我在MySQL声明中做错了什么 - 我现在已经看了36个多小时了,只是看不到它。

1 个答案:

答案 0 :(得分:2)

这里似乎工作得很好(在v5.7.13上)

mysql> create table z (x bit(7));
Query OK, 0 rows affected (0.02 sec)

mysql> insert into z (x) values (0b0101000), (0b000010);
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select cast(x & 8 as unsigned) from z;
+-------------------------+
| cast(x & 8 as unsigned) |
+-------------------------+
|                       8 |
|                       0 |
+-------------------------+
2 rows in set (0.00 sec)

mysql> select x, cast(x as unsigned) from z where x & 8;
+------+---------------------+
| x    | cast(x as unsigned) |
+------+---------------------+
| (    |                  40 |
+------+---------------------+
1 row in set (0.00 sec)

您应该显示您的ACTUAL查询。