Задать вопрос
venticello
@venticello
IT-направленный

Хранение и выборка булевых значений. Mysql

Есть 4 переключателя (вкл\выкл) по ним будет проводится выборка, пример, 1й включен 2й выключен 3й не важно 4й включен.
Как лучше организовать хранение данных, в голову сразу пришло решение 4 поля TINYINT, но как понимаю есть более грамотные решения? например, хранения в одном поле четырех значений (1101), вопрос как выбирать, через like? как эффективнее?
Какое лучше выбрать решение, ткните носом пожалуйста где почитать?
  • Вопрос задан
  • 4670 просмотров
Подписаться 3 Оценить Комментировать
Решение пользователя Dzuba К ответам на вопрос (6)
Dzuba
@Dzuba
Я бы попробовал следующее: хранить все 4 бита совместно в одном индексированном поле (назовем его bits), имеющем тип TINYINT UNSIGNED (либо BIT(4), либо SET).
А запросы бы делал в виде:
SELECT * FROM table WHERE bits IN (...)
Где вместо многоточия должны быть перечислены те значения, которые удовлетворяют маске. Для маски, указанной вами в примере, запрос примет вид:
SELECT * FROM table WHERE bits IN (b'1001', b'1011')
На мой взгляд, при таком подходе и место экономится, и производительность будет наилучшей.
Ответ написан