У меня есть поле BLOB в базе данных MySQL, содержащее семибитное двоичное поле - по существу, по одному бит для каждого дня недели, начиная с воскресенья с правым боком.MySQL побитовое выражение WHERE, возвращающее нечетные результаты
У меня есть две записи, на одном двоичном поле (называемом флаги) установлено значение 0101000, а другое - на 0000010. Я использую Querious для Mac для работы с базой данных, и это показывает, что поле содержит двоичный код данных и подтверждает указанные выше записи.
Однако, когда я выдаю инструкцию SELECT, которая включает в себя флаги & 8 = 8 в инструкции WHERE, возвращаются обе записи, но я считаю, что только первое должно быть.
PHP-код с использованием привязки bindec ($ data->) & 8 правильно только отмечает первую запись как имеющую 4-й бит (то есть значение 8).
Может кто-нибудь посоветует, что я делаю неправильно с оператором MySQL - я смотрел на это более 36 часов и просто не вижу его.
спасибо - фактический запрос является частью гораздо более крупной таблицы, но я разделил его на простое, что вызывает проблему. Может быть, я храню в BLOB, а не немного (7)? Im использует миграции Laravel 5.2 для создания базы данных, которая устанавливает поля BIT как BLOB. –
возможно, да, поскольку blobs - это просто последовательности байтов. он будет обрабатываться как строковая операция в некотором смысле, причем каждый байт в двух значениях сравнивается параллельно. Когда я переделываю выше с полями blob, я не получаю никаких строк, возвращенных вообще. –