Antworten:
Ein TINYINT ist ein 8-Bit-Ganzzahlwert, ein BIT-Feld kann zwischen 1 Bit BIT (1) und 64 Bit BIT (64) speichern. Für boolesche Werte ist BIT (1) ziemlich häufig.
Aus der Übersicht der numerischen Typen ;
BIT [(M)]
Ein Bitfeldtyp. M gibt die Anzahl der Bits pro Wert von 1 bis 64 an. Der Standardwert ist 1, wenn M weggelassen wird.
Dieser Datentyp wurde in MySQL 5.0.3 für MyISAM hinzugefügt und in 5.0.5 auf MEMORY, InnoDB, BDB und NDBCLUSTER erweitert. Vor 5.0.3 ist BIT ein Synonym für TINYINT (1).
TINYINT [(M)] [UNSIGNED] [ZEROFILL]
Eine sehr kleine ganze Zahl. Der vorzeichenbehaftete Bereich liegt zwischen -128 und 127. Der vorzeichenlose Bereich liegt zwischen 0 und 255.
Berücksichtigen Sie dies zusätzlich.
BOOL, BOOLEAN
Diese Typen sind Synonyme für TINYINT (1). Ein Wert von Null wird als falsch betrachtet. Werte ungleich Null werden als wahr angesehen.
boolean
ein Byte benötigt wird, obwohl es wirklich nur ein bisschen ist, also ist ein BIT (1) nach v5.0.3 besser?
BOOL
/ BOOLEAN
sind Aliase für TINYINT(1)
statt BIT
. Sicher, sie alle belegen am Ende ein ganzes Byte, aber semantisch BIT
wäre das viel angemessener.
Alle diese theoretischen Diskussionen sind großartig, aber in der Realität ist es zumindest, wenn Sie MySQL und wirklich auch für SQLServer verwenden, am besten, nicht-binäre Daten für Ihre Booleschen Werte beizubehalten, aus dem einfachen Grund, dass es einfacher ist, mit ihnen zu arbeiten geben die Daten aus, fragen ab und so weiter. Dies ist besonders wichtig, wenn Sie versuchen, eine Interoperabilität zwischen MySQL und SQLServer zu erreichen (dh Sie synchronisieren Daten zwischen beiden), da die Behandlung des BIT-Datentyps in beiden Fällen unterschiedlich ist. In der Praxis werden Sie also viel weniger Probleme haben, wenn Sie sich an einen numerischen Datentyp halten. Ich würde MySQL empfehlen, bei BOOL oder BOOLEAN zu bleiben, die als TINYINT (1) gespeichert werden. Selbst die Art und Weise, wie MySQL Workbench und MySQL Administrator den BIT-Datentyp anzeigen, ist nicht gut (es ist ein kleines Symbol für Binärdaten).
BIT sollte nur 0 und 1 zulassen (und NULL, wenn das Feld nicht als NOT NULL definiert ist). TINYINT (1) erlaubt jeden Wert, der in einem einzelnen Byte gespeichert werden kann, -128..127 oder 0..255, je nachdem, ob es nicht signiert ist oder nicht (die 1 zeigt, dass Sie nur eine einzelne Ziffer verwenden möchten, dies jedoch tut nicht daran hindern, einen größeren Wert zu speichern).
Bei Versionen älter als 5.0.3 wird BIT als TINYINT (1) interpretiert, daher gibt es dort keinen Unterschied.
BIT hat die Semantik "Dies ist ein Boolescher Wert", und einige Apps betrachten TINYINT (1) auf dieselbe Weise (aufgrund der Art und Weise, wie MySQL es behandelt), sodass Apps die Spalte möglicherweise als Kontrollkästchen formatieren, wenn sie den Typ aktivieren und entscheiden Sie sich für ein darauf basierendes Format.
Könnte falsch sein, aber:
Tinyint ist eine ganze Zahl zwischen 0 und 255
Bit ist entweder 1 oder 0
Daher ist für mich Bit die Wahl für Boolesche
Aus meiner Erfahrung sage ich Ihnen, dass BIT Probleme mit Linux-Betriebssystemtypen hat (z. B. Ubuntu). Ich habe meine Datenbank unter Windows entwickelt und nachdem ich alles unter Linux bereitgestellt hatte, hatte ich Probleme mit Abfragen, die Tabellen mit BIT DATA TYPE eingefügt oder ausgewählt haben.
Bit ist vorerst nicht sicher. Ich wechselte zu tinyint (1) und arbeitete perfekt. Ich meine, Sie brauchen nur einen Wert, um zu unterscheiden, ob es 1 oder 0 ist, und tinyint (1) ist dafür in Ordnung