Boolesche Spalte in MySQL mit false als Standardwert erstellen?


127

Ich möchte eine Tabelle in MySQL mit einer booleanSpalte erstellen, deren Standardwert ist false. Aber es akzeptiert NULL als Standard ...

Antworten:


202

Sie müssen als Standard 0(falsch) oder 1(wahr) angeben . Hier ist ein Beispiel:

create table mytable (
     mybool boolean not null default 0
);

Zu Ihrer Information: booleanist ein Alias ​​für tinyint(1).

Hier ist der Beweis:

mysql> create table mytable (
    ->          mybool boolean not null default 0
    ->     );
Query OK, 0 rows affected (0.35 sec)

mysql> insert into mytable () values ();
Query OK, 1 row affected (0.00 sec)

mysql> select * from mytable;
+--------+
| mybool |
+--------+
|      0 |
+--------+
1 row in set (0.00 sec)

Zu Ihrer Information: Mein Test wurde mit der folgenden Version von MySQL durchgeführt:

mysql> select version();
+----------------+
| version()      |
+----------------+
| 5.0.18-max-log |
+----------------+
1 row in set (0.00 sec)

2
Oder doch? In Shell-Skripten kann 0 erfolgreich oder "wahr" bedeuten. Es wäre schön, wenn MySQL tatsächlich "true" und "false" zurückgeben würde, damit wir uns nicht darauf verlassen müssen, dass der Code entscheidet, was der Wert bedeutet.
Tu-Reinstate Monica-dor duh

3
Da Boolescher Wert ein Alias ​​für tinyint (1) ist, bedeutet dies übrigens, dass Sie Boolesche Werte auf andere Zahlen als 0 und 1 setzen können und sich nicht beschweren! Das heißt, wenn Sie das Feld versehentlich erhöhen oder verringern, können Sie Ihre Daten durcheinander bringen! : -O Ich würde empfehlen, stattdessen ein ENUM-Feld zu verwenden.
Tu-Reinstate Monica-dor duh

3
"Erfolgreich" und "wahr" sind völlig orthogonale Dinge. Fehlercodes sind keine Booleschen Werte.
Matthew Read

14

Verwenden Sie ENUM in MySQL für true / false, um die true / false-Werte ohne zusätzlichen Code anzugeben und zu akzeptieren.

ALTER TABLE `itemcategory` ADD `aaa` ENUM('false', 'true') NOT NULL DEFAULT 'false'

11

Sie können beim Erstellen einen Standardwert festlegen, wie:

CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
Married boolean DEFAULT false);

1

Wenn Sie die boolesche Spalte als nicht null festlegen, ist der Standardwert 'default' false. Sie müssen es nicht explizit angeben.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.