Bit vs. Boolesche Spalten

12

Vorausgesetzt, dass Bitfelder nur binäre Darstellungen von Daten sind und auf etwas "seltsame" Weise abgefragt werden müssen.

Bietet es tatsächlich Vorteile, ein Bitfeld für einen Booleschen Wert zu verwenden? Soweit ich sehen kann, scheint der Raum der einzige wirkliche Vorteil zu sein.

Mark D
quelle

Antworten:

14

Persönlich würde ich das BOOLEANfür einen Booleschen Wert verwenden. Beachten Sie jedoch, dass MySQL BOOLEANnur ein Synonym für TINYINT(1) [src] ist .

Dies bedeutet natürlich, dass Sie andere Werte als 0 oder 1 haben können, wenn Sie nicht vorsichtig sind. Um dies zu vermeiden, können Sie die Aliase TRUEund FALSEbeim Einfügen und Aktualisieren von Daten als Zuordnung zu 1 bzw. 0 verwenden.

Der Vollständigkeit halber war vor 5.0.3 BITauch ein Synonym für TINYINT(1).

Derek Downey
quelle
1

Wenn ich es richtig verstehe, verwendet BOOLEAN immer 1 Byte pro Spalte, aber BIT (n) verwendet so wenig Bytes, wie erforderlich sind, um die angegebene Anzahl von Bits zu speichern.

BIT spart möglicherweise Speicherplatz, BOOLEAN ist jedoch einfacher zu verwenden, wenn Sie sie mit SQL abfragen müssen.

Wenn ich eine Reihe von Flags hätte, die von einer Anwendung verstanden und in einem einzigen Feld in der Anwendung gespeichert wurden, würde ich BIT (n) verwenden. Wenn ich jedoch Spalten hätte, die von SQL abgefragt werden müssten, würde ich BOOLEAN verwenden.

Ein Beispiel wäre eine Anwendung, die mithilfe von Flags aufzeichnet, in welchen Wochen ein Ereignis ausgeführt werden soll, wobei ein Bit pro Woche 1 ist, wenn das Ereignis in der angegebenen Woche ausgeführt wird. Wenn die Daten in einer Datenbank einfach abzufragen wären, würden sie über zwei Tabellen hinweg „normalisiert“. Wenn die Daten jedoch nur in der Datenbank gespeichert werden müssten, sollten sie in der Form aufbewahrt werden, in der sie von der Anwendung verwendet werden im.

Ian Ringrose
quelle