webentwicklung-frage-antwort-db.com.de

Was ist der Unterschied zwischen BIT und TINYINT in MySQL?

In welchen Fällen würden Sie welche verwenden? Gibt es einen großen Unterschied? Was ich normalerweise von Persistenz-Engines zum Speichern von Booleschen Werten verwende?

96
carrier

Ein TINYINT ist ein 8-Bit-Integer-Wert, ein BIT-Feld kann zwischen 1 Bit BIT (1) und 64 Bit BIT (64) speichern. Für einen Booleschen Wert ist BIT (1) ziemlich häufig.

112
Robert Gamble

Von Ü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 um MEMORY, InnoDB, BDB und NDBCLUSTER erweitert. BIT ist vor 5.0.3 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.

Beachten 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 gelten als wahr.

54
Nelson Miranda

Alle diese theoretischen Diskussionen sind großartig, aber in Wirklichkeit ist es, zumindest wenn Sie MySQL und wirklich auch SQLServer verwenden, am besten, nicht-binäre Daten für Ihre Booleschen zu verwenden, da 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 (d. H. Sie synchronisieren Daten zwischen beiden), da die Behandlung des BIT-Datentyps in beiden Fällen unterschiedlich ist. SO in der Praxis werden Sie viel weniger Probleme haben, wenn Sie sich an einen numerischen Datentyp halten. Ich würde MySQL empfehlen, sich an BOOL oder BOOLEAN zu halten, die als TINYINT (1) gespeichert werden. Auch so MySQL Workbench und MySQL Administrator zeigen an, dass der BIT-Datentyp nicht Nice ist (ein kleines Symbol für Binärdaten). Seien Sie also praktisch und ersparen Sie sich den Ärger (und ich spreche leider aus Erfahrung).

34
Sheldmandu

BIT sollte nur 0 und 1 zulassen (und NULL, wenn das Feld nicht als NOT NULL definiert ist). TINYINT (1) lässt jeden Wert zu, der in einem einzelnen Byte gespeichert werden kann, -128..127 oder 0..255, je nachdem, ob es vorzeichenlos ist oder nicht (die 1 zeigt an, dass Sie nur eine einzelne Ziffer verwenden möchten, dies ist jedoch der Fall nicht daran hindern, einen größeren Wert zu speichern).

Für Versionen älter als 5.0.3 wird BIT als TINYINT (1) interpretiert, es gibt also no einen 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 als Kontrollkästchen formatieren können, wenn sie den Typ aktivieren und entscheiden Sie sich für ein Format, das darauf basiert.

11
Michael Madsen

Könnte falsch sein, aber:

Tinyint ist eine Ganzzahl zwischen 0 und 255

das Bit ist entweder 1 oder 0

Deshalb ist für mich Bit die Wahl für Booleaner

3
Allen Hardy

Aus meiner Erfahrung erzähle ich Ihnen, dass BIT Probleme unter Linux-Betriebssystemen (Ubuntu für Ex) hat. Ich habe meine Datenbank unter Windows entwickelt und nachdem ich alles unter Linux bereitgestellt hatte, hatte ich Probleme mit Abfragen, die Tabellen mit dem Datentyp BIT eingefügt oder ausgewählt hatten.

Bit ist vorerst nicht sicher. Ich bin zu tinyint (1) gewechselt und habe perfekt gearbeitet. Ich meine, Sie brauchen nur einen Wert, um zu differenzieren, wenn er 1 oder 0 ist, und tinyint (1) ist dafür in Ordnung

0
AndreiTiberiu