Utworzyć kolumnę logiczną w MySQL z wartością domyślną false?

127

Chcę utworzyć tabelę w MySQL z booleankolumną, której domyślną wartością jest false. Ale domyślnie akceptuje NULL ...

user169258
źródło

Odpowiedzi:

202

Musisz określić 0(co oznacza fałsz) lub 1(co oznacza prawda) jako domyślne. Oto przykład:

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

FYI: booleanto alias dla tinyint(1).

Oto dowód:

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)

FYI: Mój test został wykonany na następującej wersji MySQL:

mysql> select version();
+----------------+
| version()      |
+----------------+
| 5.0.18-max-log |
+----------------+
1 row in set (0.00 sec)
Asaf
źródło
2
Czy to prawda? W skryptach powłoki 0 może oznaczać pomyślne lub „prawdziwe”. Byłoby miło, gdyby MySQL faktycznie zwrócił „prawda” i „fałsz”, abyśmy nie musieli polegać na kodzie decydującym o tym, co oznacza wartość.
tu-Przywróć Monica-dor duh
3
Nawiasem mówiąc, ponieważ boolean jest aliasem dla tinyint (1), oznacza to, że możesz ustawić wartości logiczne na liczby inne niż 0 i 1 i nie będzie narzekać! Co oznacza, że ​​jeśli przypadkowo zwiększysz lub zmniejszysz pole, możesz zepsuć swoje dane! : -O Polecam zamiast tego użycie pola ENUM.
tu-Przywróć Monica-dor duh
3
„Udane” i „prawdziwe” to rzeczy całkowicie ortogonalne. Kody błędów nie są wartościami logicznymi.
Matthew Przeczytaj
14

Użyj ENUM w MySQL dla true / false, które podaje i akceptuje wartości true / false bez dodatkowego kodu.

ALTER TABLE `itemcategory` ADD `aaa` ENUM('false', 'true') NOT NULL DEFAULT 'false'
Gaurav Sethi
źródło
11

Możesz ustawić wartość domyślną w czasie tworzenia, na przykład:

CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
Married boolean DEFAULT false);
Archana Shah
źródło
1

Jeśli ustawisz kolumnę boolowską jako inną niż null, domyślną wartością „default” jest false; nie musisz tego jawnie określać.

Tech Junkie
źródło