Хранение двоичной строки в MySQL - PullRequest
6 голосов
/ 27 апреля 2011

Я разработал небольшую систему двоичных флагов для нашего административного центра.Это позволяет нам устанавливать элементы для нескольких назначенных им опций, без необходимости хранить таблицу с несколькими полями.

Как только опции конвертируются в двоичные с побитовыми операторами, мы получаем опциюкак 10000 или 10010, что все хорошо.Делая это таким образом, мы можем продолжать добавлять опции, но без необходимости перезаписывать, какое значение есть, 10010 & (1 << 4), и я знаю, что у нас что-то включено.хранит эти данные в нашей таблице MySQL.Я пробовал несколько типов полей, но ни один из них не позволяет мне выполнить запрос, например, </p>

SELECT * FROM _table_ x WHERE x.options & (1 << 4)

Предложения?

Ответы [ 2 ]

3 голосов
/ 27 апреля 2011

Чтобы проверить, установлен ли бит, ваш запрос должен быть:

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'
1 голос
/ 27 апреля 2011

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

...