Хранение двоичной строки в MySQL
Я разработал небольшую систему двоичных флагов для нашего административного центра. Это позволяет нам устанавливать элементы для нескольких назначенных им опций, без необходимости хранить таблицу с несколькими полями.
Как только параметры будут преобразованы в двоичный файл с помощью побитовых операторов, мы получим опцию, например 10000 или 10010, и все это хорошо. Делая это таким образом, мы можем продолжать добавлять опции, но без необходимости перезаписывать, какое значение равно 10010 & (1 << 4), и я знаю, что у нас что-то включено.
Однако проблема заключается в сохранении этих данных в нашей таблице MySQL. Я пробовал несколько типов полей, но ни один из них не позволяет мне выполнить запрос, такой как,
SELECT * FROM _table_ x WHERE x.options & (1 << 4)
Предложения?
2 ответа
Чтобы проверить, установлен ли бит, ваш запрос должен быть:
SELECT * FROM _table_ x WHERE x.options & (1 << 4) != 0
И проверить, не установлен ли он:
SELECT * FROM _table_ x WHERE x.options & (1 << 4) = 0
Обновление: вот как установить отдельный бит:
UPDATE table SET options = options | (1 << 4)
Чтобы очистить отдельный бит:
UPDATE table SET options = options &~ (1 << 4)
Вы также можете установить их все сразу с помощью двоичной строки:
UPDATE table SET options = b'00010010'