MySQL побитовое в выражении WHERE, возвращающем нечетные результаты

У меня есть поле BLOB в базе данных MySQL, которое содержит семибитовое двоичное поле — по сути, один бит для каждого дня недели, начиная с воскресенья с правого бита.

У меня есть две записи, на одном двоичное поле (называемое Flags) установлено на 0101000, а на другое — 0000010. Я использую программное обеспечение Querious на Mac для работы с базой данных, и это показывает, что поле содержит двоичные данные и подтверждает выше записи.

Однако, когда я запускаю оператор SELECT, он включает флаги & 8 = 8 в операторе WHERE возвращаются обе записи, но я считаю, что должна быть только первая.

Код PHP с использованием bindec ($ data-> flags) & 8 правильно отмечает только первую запись как имеющую 4-й бит (то есть значение 8).

Может кто-нибудь посоветовать, что я делаю неправильно с оператором MySQL — я смотрю на это уже более 36 часов и просто не могу это увидеть.

1

Решение

Кажется, работает хорошо здесь, здесь (на 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)

Вы должны показать свой фактический запрос.

2

Другие решения

Других решений пока нет …