web-dev-qa-db-ger.com

BOOLEAN oder TINYINT Verwirrung

Ich entwarf eine Datenbank für eine Site, auf der ich einen booleschen Datentyp verwenden muss, um nur zwei Zustände zu speichern, true oder false. Ich benutze MySQL.
Beim Entwerfen der Datenbank mit phpMyAdmin habe ich festgestellt, dass ich sowohl den Datentyp BOOLEAN als auch den Datentyp TINYINT habe.
Ich habe verschiedene Artikel durchgesehen, einige sagten, TINYINT sei das gleiche wie BOOLEAN, kein Unterschied. Einige sagen, BOOLEAN wird in MySQL in TINYINT konvertiert.

Meine Frage ist, wenn beide gleich sind, warum gibt es zwei? Es sollte nur einen von ihnen geben.

Hier ist der Hinweis auf die Artikel, die ich gelesen habe:
http://www.careerride.com/MySQL-BOOL-TINYINT-BIT.aspx
http://dev.mysql.com/doc/refman/5.5/de/numeric-type-overview.html

MySQL hat keinen internen booleschen Datentyp. Es verwendet den kleinsten ganzzahligen Datentyp - TINYINT.

BOOLEAN und BOOL sind Äquivalente von TINYINT (1), da sie Synonyme sind.

Versuchen Sie, diese Tabelle zu erstellen - 

CREATE TABLE table1 (
  column1 BOOLEAN DEFAULT NULL
);

Führen Sie dann SHOW CREATE TABLE aus. Sie erhalten diese Ausgabe -

CREATE TABLE `table1` (
  `column1` tinyint(1) DEFAULT NULL
)
114
Devart

Nur ein Hinweis für PHP-Entwickler (mir fehlen die Stackoverflow-Punkte, um dies als Kommentar zu posten) ... Die automatische Umwandlung in TINYINT bedeutet, dass PHP einen Wert aus einer "BOOLEAN" -Spalte als "0" oder "0" abruft "1", nicht die erwartete (von mir) wahr/falsch.

Ein Entwickler, der sich die SQL ansieht, mit der eine Tabelle erstellt wurde, sieht Folgendes: "Some_boolean BOOLEAN NOT NULL DEFAULT FALSE". Es kann davon ausgegangen werden, dass wahr/falsch-Ergebnisse angezeigt werden, wenn eine Zeile mit dieser Spalte abgerufen wird. Stattdessen (zumindest in meiner PHP-Version) lautet das Ergebnis "0" oder "1" (ja, eine Zeichenfolge "0" oder Zeichenfolge "1", keine int 0/1, danke PHP).

Es ist ein Scherz, aber genug, um zu verhindern, dass Komponententests fehlschlagen.

28
Tom Stambaugh

Die neuesten MySQL-Versionen haben den neuen Datentyp BIT, in dem Sie die Anzahl der Bits im Feld angeben können, z. B. BIT(1) als Boolean-Typ, da es nur 0 oder 1 sein kann.

Ab MySql 5.1 Version Referenz

BIT(M) =  approximately (M+7)/8 bytes, 
BIT(1) =  (1+7)/8 = 1 bytes (8 bits)

================================================== =========================

TINYINT(1) take 8 bits.

https://dev.mysql.com/doc/refman/5.7/de/storage-requirements.html#data-types-storage-reqs-numeric

7
fortune

Die numerische Typenübersicht für MySQL lautet: BOOL, BOOLEAN: Diese Typen sind Synonyme für TINYINT (1). Ein Wert von Null wird als falsch betrachtet. Werte ungleich Null werden als wahr betrachtet.

Siehe hier: https://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html