Бит против булевых столбцов

12

Учитывая, что битовые поля являются просто двоичными представлениями данных и должны запрашиваться немного «странным» способом.

Действительно ли это дает какую-либо выгоду, используя битовое поле для логического значения? Из того, что я вижу, можно предположить, что единственное реальное преимущество - космос.

Марк Д
источник

Ответы:

14

Лично я бы использовал BOOLEANдля логического значения. Но помните, что в MySQL BOOLEANэто просто синоним TINYINT(1) [src] .

Это, конечно, означает, что вы можете иметь значения, отличные от 0 или 1, если вы не будете осторожны. Чтобы избежать этого, вы можете использовать псевдонимы TRUEи FALSEпри вставке и обновлении данных, так как они соответствуют 1 и 0 соответственно.

Для полноты, до 5.0.3, BITтакже был синонимом TINYINT(1).

Дерек Дауни
источник
1

Если я правильно понимаю, BOOLEAN всегда использует 1 байт на столбец, но BIT (n) будет использовать столько же байтов, сколько необходимо для хранения заданного количества бит.

Таким образом, BIT может сэкономить некоторое пространство, но с BOOLEAN легче работать, если вам нужно запросить их с помощью SQL.

Если бы у меня был набор флагов, которые были понятны приложению и сохранены в одном поле приложения, я бы искал возможность использовать BIT (n). Однако если бы у меня были столбцы, которые нужно было запрашивать из SQL, я бы использовал BOOLEAN.

Примером может служить приложение, которое использует флаги для записи того, в какие недели должно выполняться событие, с частотой в неделю, равной 1, если событие выполняется в данную неделю. Если данные будут легко запрашивать в базе данных, они будут «нормализованы» по двум таблицам, но если данные необходимо хранить только в базе данных, то лучше хранить их в той форме, в которой их использует приложение. в.

Ян Рингроз
источник