Was ist der Vorteil von BOOLEAN gegenüber TINYINT (1)?

16

Im MySQL-Handbuch heißt es:

BOOL, BOOLEAN

Diese Typen sind Synonyme für TINYINT (1). Ein Wert von Null wird als falsch betrachtet. Werte ungleich Null gelten als wahr:

Ich habe eine BOOLEAN-Spalte mit 0dem Standardwert erstellt. Dann aktualisiere ich den Wert auf 2. Logischerweise würde ich erwarten, dass MySQL entweder akzeptiert 0oder 1ein Boolescher Wert ist. MySQL hat jedoch keinen Fehler ausgegeben oder mich daran gehindert, das Update durchzuführen.

Wenn BOOLEAN genauso funktioniert wie TINYINT (1), macht es dann einen Unterschied, ob ich TINYINT (1) oder BOOLEAN verwende?

Fragenüberlauf
quelle

Antworten:

11

Diese beiden sind wirklich Synonyme, sodass Sie sie austauschbar verwenden können. Sie werden keinen Unterschied zwischen ihnen sehen.

Wenn Sie nur 0 und 1 zulassen möchten, können Sie den bitTyp weiterhin verwenden .

dezso
quelle
1
@QuestionOverflow Denken Sie daran, dass dies BITwirklich ein Bitfeld ist, das ein bis vierundsechzig Bits kompakt enthält.
David Harkness
2

Wenn Sie mit anderen Personen arbeiten (oder sich selbst daran erinnern möchten), können Sie den Datentyp verwenden, BOOLEANum vorzuschlagen, dass die Daten nur den Wert 1 oder 0 annehmen sollen.

Cato Minor
quelle
0

Mir scheint, es gibt tatsächlich einen Unterschied.

In einer von mir verwendeten Tabelle ist eine Spalte als tinyint mit einem Index für die Spalte definiert. Wenn ich die folgende Abfrage aufrufe "EXPLAIN SELECT * AUS TABELLE, IN DER SPALTE WAHR IST", zeigt dies an, dass alle Zeilen in der Tabelle gelesen werden (die Spalten "Possible_keys" und "Ref" sind null, obwohl die Spalte "Key" die Spalte enthält Index).

Wenn Sie die Abfrage in "EXPLAIN SELECT * AUS TABELLE MIT SPALTE = 1" ändern, wird der Index korrekt ausgelöst, wobei "Mögliche Schlüssel" und "Ref" -Spalten Werte zugewiesen und "Zeilen" eine viel niedrigere Zahl haben.

Ich habe auch versucht, das "wahr" durch "falsch" und die 1 durch eine 0 zu ersetzen und habe vergleichbare Ergebnisse erzielt.

Als ich noch einen Schritt weiter ging, wechselte ich von einem winzigen auf einen int und es machte keinen Unterschied.

user77843
quelle