In welchen Fällen würden Sie welche verwenden? Gibt es einen großen Unterschied? Welche verwende ich normalerweise von Persistenz-Engines zum Speichern von Booleschen Werten?
106
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)]
TINYINT [(M)] [UNSIGNED] [ZEROFILL]
Berücksichtigen Sie dies zusätzlich.
BOOL, BOOLEAN
quelle
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ürTINYINT(1)
stattBIT
. Sicher, sie alle belegen am Ende ein ganzes Byte, aber semantischBIT
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).
quelle
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.
quelle
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
quelle
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
quelle