¿Crear columna booleana en MySQL con falso como valor predeterminado?

127

Quiero crear una tabla en MySQL con una booleancolumna cuyo valor predeterminado es false. Pero está aceptando NULL como predeterminado ...

usuario169258
fuente

Respuestas:

202

Debe especificar 0(significado falso) o 1(significado verdadero) como valor predeterminado. Aquí hay un ejemplo:

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

FYI: booleanes un alias para tinyint(1).

Aquí está la prueba:

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: Mi prueba se realizó en la siguiente versión de MySQL:

mysql> select version();
+----------------+
| version()      |
+----------------+
| 5.0.18-max-log |
+----------------+
1 row in set (0.00 sec)
Asaph
fuente
2
O lo hace? En shell scripting 0 puede significa exitoso o 'verdadero'. Sería bueno si MySQL realmente devolviera 'verdadero' y 'falso' para que no tuviéramos que confiar en que el código decidiera qué significa el valor.
tu-Reinstate Monica-dor duh
3
Por cierto, dado que boolean es un alias para tinyint (1), eso significa que puede establecer booleanos en números que no sean 0 y 1 y no se quejará. Lo que significa que si incrementa o disminuye accidentalmente el campo, ¡puede arruinar sus datos! : -O Recomiendo usar un campo ENUM en su lugar.
tu-Reinstate Monica-dor duh
3
"Exitoso" y "verdadero" son cosas completamente ortogonales. Los códigos de error no son booleanos.
Matthew leyó
14

Use ENUM en MySQL para verdadero / falso que da y acepta los valores verdadero / falso sin ningún código adicional.

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

Puede establecer un valor predeterminado en el momento de la creación como:

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

Si está haciendo que la columna booleana no sea nula, entonces el valor predeterminado 'predeterminado' es falso; no tiene que especificarlo explícitamente.

Adicto a la tecnología
fuente