160 votes

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

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

245voto

Asaph Points 56989

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

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

FYI : boolean est un alias pour tinyint(1) .

En 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)

2 votes

Ou bien est-ce le cas ? Dans les scripts shell, 0 peut signifier succès ou 'vrai'. Ce serait bien si MySQL retournait réellement 'true' et 'false' afin que nous n'ayons pas à compter sur le code pour décider de la signification de la valeur.

3 votes

Incidemment, puisque boolean est un alias pour tinyint(1), cela signifie que vous pouvez définir des booleans à des nombres autres que 0 et 1 et il ne se plaindra pas ! Ce qui veut dire que si vous incrémentez ou décrémentez accidentellement le champ, vous pouvez perturber vos données ! :-O Je vous recommande d'utiliser un champ ENUM à la place.

4 votes

"Réussi" et "vrai" sont des choses complètement orthogonales. Les codes d'erreur ne sont pas des booléens.

25voto

Archana Shah Points 315

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);

15voto

Gaurav Sethi Points 149

Utilisez ENUM dans MySQL pour le 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'

2voto

Tech Junkie Points 634

Si vous faites en sorte que la colonne booléenne ne soit pas nulle, la valeur par défaut est false ; vous n'avez pas besoin de la spécifier explicitement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X