Хранение двоичной строки в 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'

Будет ли здесь использоваться тип поля SET?

Другие вопросы по тегам