Ich habe eine Datenbank für eine Site entworfen, bei 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 stellte ich fest, dass ich sowohl den BOOLEAN-Datentyp als auch den TINYINT-Datentyp habe.
Ich habe verschiedene Artikel durchgesehen, einige sagten, TINYINT sei dasselbe wie BOOLEAN, kein Unterschied. Einige sagen, BOOLEAN sei 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 Verweis auf die Artikel, die ich gelesen habe:
http://www.careerride.com/MySQL-BOOL-TINYINT-BIT.aspx
http://dev.mysql.com/doc/refman/5.5/en/numeric-type -overview.html
BIT(1)
oderBIT(17)
oder sogarBIT(64)
Nur ein Hinweis für PHP-Entwickler (mir fehlen die notwendigen Stackoverflow-Punkte, um dies als Kommentar zu veröffentlichen) ... Die automatische (und stille) Konvertierung in TINYINT bedeutet, dass PHP einen Wert aus einer "BOOLEAN" -Spalte als "0" oder "0" abruft "1", nicht das erwartete (von mir) wahr / falsch.
Ein Entwickler, der sich das zum Erstellen einer Tabelle verwendete SQL ansieht und Folgendes sieht: "some_boolean BOOLEAN NOT NULL DEFAULT FALSE", kann vernünftigerweise erwarten, dass beim Abrufen einer Zeile mit dieser Spalte True / False-Ergebnisse angezeigt werden. Stattdessen (zumindest in meiner Version von PHP) ist das Ergebnis "0" oder "1" (ja, eine Zeichenfolge "0" oder eine Zeichenfolge "1", keine int 0/1, danke php).
Es ist ein Trottel, aber genug, um Unit-Tests zum Scheitern zu bringen.
quelle
Die neuesten MySQL-Versionen haben den neuen
BIT
Datentyp, in dem Sie die Anzahl der Bits im Feld angeben können, die beispielsweiseBIT(1)
alsBoolean
Typ verwendet werden sollen, da dies nur0
oder sein kann1
.quelle
Ab MySQL 5.1 Version Referenz
================================================== =======================
https://dev.mysql.com/doc/refman/5.7/de/storage-requirements.html#data-types-storage-reqs-numeric
quelle
Die numerische Typü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 angesehen.
Siehe hier: https://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html
quelle