Php 返回奇数结果的WHERE语句中的MySQL按位

Php 返回奇数结果的WHERE语句中的MySQL按位,php,mysql,bitwise-operators,Php,Mysql,Bitwise Operators,我在MySQL数据库中有一个BLOB字段,它包含一个7位二进制字段——本质上,一周中的每一天都有一位,从一个星期天开始,右边是一位 我有两个记录,一个二进制字段(称为标志)设置为0101000,另一个设置为0000010。我在Mac上使用查询软件进行数据库工作,这表明该字段确实包含二进制数据,并确认了上述条目 然而,当我发出一个SELECT语句时,其中包括WHERE语句中的标志&8=8,两条记录都会返回,但我认为应该只返回第一条记录 使用bindec($data->flags)&8的PHP代码只

我在MySQL数据库中有一个BLOB字段,它包含一个7位二进制字段——本质上,一周中的每一天都有一位,从一个星期天开始,右边是一位

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

然而,当我发出一个SELECT语句时,其中包括WHERE语句中的标志&8=8,两条记录都会返回,但我认为应该只返回第一条记录

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


有人能告诉我MySQL语句的错误在哪里吗?我已经看了36个多小时了,只是看不到它。

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


您应该显示您的实际查询。

谢谢-实际查询是一个大得多的表的一部分,但我已将其精简为这一部分,这就是问题的根源。可能是因为我存储在一个水滴中,而不是一点(7)?我使用Laravel5.2迁移创建数据库,将位字段设置为blob。可能是的,因为blob只是字节序列。在某种程度上,它将被视为一个字符串操作,两个值中的每个字节将被并行比较。当我用blob字段重做上述操作时,我根本没有返回任何行。
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)