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 0
dem Standardwert erstellt. Dann aktualisiere ich den Wert auf 2
. Logischerweise würde ich erwarten, dass MySQL entweder akzeptiert 0
oder 1
ein 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?
BIT
wirklich ein Bitfeld ist, das ein bis vierundsechzig Bits kompakt enthält.Wenn Sie mit anderen Personen arbeiten (oder sich selbst daran erinnern möchten), können Sie den Datentyp verwenden,
BOOLEAN
um vorzuschlagen, dass die Daten nur den Wert 1 oder 0 annehmen sollen.quelle
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.
quelle