我在MySQL数据库中有一个BLOB字段,其中包含一个七位二进制字段 - 本质上,一周中每天的一位,从右手位的星期日开始。
我有两个记录,一个是二进制字段(称为Flags)设置为0101000而另一个设置为0000010.我在Mac上使用Querious软件进行数据库工作,这表明该字段确实包含二进制数据并确认以上条目。
但是,当我发出一个SELECT语句时,包括Flags&在WHERE语句中8 = 8,两个记录都被返回,但我相信只有第一个记录。
使用bindec的PHP代码($ data-> flags)& 8正确地仅将第一个记录标记为设置了第4位(即值8)。
任何人都可以告诉我我在MySQL声明中做错了什么 - 我现在已经看了36个多小时了,只是看不到它。
答案 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查询。