Пока MySQL не реализует битовый тип данных, если ваша обработка действительно ограничена пространством и / или временем, например, при транзакциях с большим объемом, создайте поле TINYINT с именем bit_flags
для всех ваших логических переменных, а также маскируйте и сдвигайте логическое значение бит, который вы хотите в вашем запросе SQL.
Например, если ваш самый левый бит представляет ваше поле bool, а 7 самых правых битов ничего не представляют, тогда ваше поле bit_flags
будет равно 128 (двоичный код 10000000). Маскируйте (скрывайте) семь крайних правых битов (используя побитовый оператор &
) и сдвигайте 8-й бит на семь пробелов вправо, заканчивая 00000001. Теперь все число (которое в данном случае равно 1) является вашим значение.
SELECT (t.bit_flags & 128) >> 7 AS myBool FROM myTable t;
if bit_flags = 128 ==> 1 (true)
if bit_flags = 0 ==> 0 (false)
Вы можете запускать подобные выражения при тестировании
SELECT (128 & 128) >> 7;
SELECT (0 & 128) >> 7;
и т.д.
Поскольку у вас есть 8 битов, у вас есть потенциально 8 логических переменных из одного байта. Некоторые будущие программисты всегда будут использовать следующие семь битов, поэтому вы должны замаскировать. Не сдвигайтесь, иначе вы создадите ад для себя и других в будущем. Убедитесь, что MySQL выполняет маскирование и сдвиг - это будет значительно быстрее, чем это делает язык веб-сценариев (PHP, ASP и т. Д.). Также убедитесь, что вы поместили комментарий в поле комментария MySQL для своего поля bit_flags
.
Эти сайты будут полезны при реализации этого метода: