Créer une colonne booléenne dans MySQL avec false comme valeur par défaut?

127

Je souhaite créer une table dans MySQL avec une booleancolonne dont la valeur par défaut est false. Mais il accepte NULL par défaut ...

user169258
la source

Réponses:

202

Vous devez spécifier 0(ce qui signifie faux) ou 1(ce qui signifie vrai) comme valeur par défaut. Voici un exemple:

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

FYI: booleanest un alias pour tinyint(1).

Voici la preuve:

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: Mon test a été effectué sur la version suivante de MySQL:

mysql> select version();
+----------------+
| version()      |
+----------------+
| 5.0.18-max-log |
+----------------+
1 row in set (0.00 sec)
Asaph
la source
2
Ou le fait-il? Dans le script shell, 0 peut être synonyme de succès ou «vrai». Ce serait bien si MySQL retournait réellement «vrai» et «faux» pour que nous n'ayons pas à nous fier au code pour décider de la signification de la valeur.
tu-Reinstate Monica-dor duh
3
Incidemment, puisque boolean est un alias pour tinyint (1), cela signifie que vous pouvez définir des booléens sur des nombres autres que 0 et 1 et cela ne se plaindra pas! Ce qui signifie que si vous incrémentez ou décrémentez accidentellement le champ, vous pouvez gâcher vos données! : -O Je recommande d'utiliser un champ ENUM à la place.
tu-Reinstate Monica-dor duh
3
«Réussir» et «vrai» sont des choses complètement orthogonales. Les codes d'erreur ne sont pas des booléens.
Matthew Read
14

Utilisez ENUM dans MySQL pour vrai / faux, il donne et accepte les valeurs vrai / faux sans aucun code supplémentaire.

ALTER TABLE `itemcategory` ADD `aaa` ENUM('false', 'true') NOT NULL DEFAULT 'false'
Gaurav Sethi
la source
11

Vous pouvez définir une valeur par défaut au moment de la création comme:

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

Si vous rendez la colonne booléenne non nulle, la valeur par défaut «par défaut» est false; vous n'avez pas à le spécifier explicitement.

Accro à la technologie
la source