Creare una colonna booleana in MySQL con false come valore predefinito?


127

Voglio creare una tabella in MySQL con una booleancolonna il cui valore predefinito è false. Ma sta accettando NULL come impostazione predefinita ...

Risposte:


202

Devi specificare 0(che significa falso) o 1(che significa vero) come impostazione predefinita. Ecco un esempio:

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

FYI: booleanè un alias per tinyint(1).

Ecco la prova:

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: Il mio test è stato fatto sulla seguente versione di MySQL:

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

2
Oppure sì? Nello scripting di shell 0 può significare successo o "vero". Sarebbe bello se MySQL restituisse effettivamente "true" e "false" in modo da non dover fare affidamento sul codice per decidere cosa significa il valore.
tu-Reinstate Monica-dor duh

3
Per inciso, poiché boolean è un alias per tinyint (1), ciò significa che puoi impostare booleani su numeri diversi da 0 e 1 e non si lamenterà! Ciò significa che se aumenti o decrementi accidentalmente il campo, puoi incasinare i tuoi dati! : -O Suggerirei di utilizzare invece un campo ENUM.
tu-Reinstate Monica-dor duh

3
"Successo" e "vero" sono cose completamente ortogonali. I codici di errore non sono booleani.
Matthew Read

14

Usa ENUM in MySQL per vero / falso che fornisce e accetta i valori vero / falso senza alcun codice aggiuntivo.

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

11

Puoi impostare un valore predefinito al momento della creazione come:

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

1

Se si imposta la colonna booleana come non nulla, il valore "predefinito" predefinito è falso; non è necessario specificarlo esplicitamente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.