Criar coluna booleana no MySQL com false como valor padrão?

127

Eu quero criar uma tabela no MySQL com uma booleancoluna cujo valor padrão é false. Mas está aceitando NULL como padrão ...

user169258
fonte

Respostas:

202

Você deve especificar 0(significando falso) ou 1(verdadeiro) como padrão. Aqui está um exemplo:

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

FYI: booleané um apelido para tinyint(1).

Aqui está a 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: Meu teste foi realizado na seguinte versão do MySQL:

mysql> select version();
+----------------+
| version()      |
+----------------+
| 5.0.18-max-log |
+----------------+
1 row in set (0.00 sec)
Asaph
fonte
2
Ou faz? No script de shell, 0 pode significar êxito ou 'true'. Seria bom se o MySQL realmente retornasse 'true' e 'false', para que não precisássemos confiar no código para decidir qual o valor.
tu-Restabelece Monica-dor duh 28/05
3
Aliás, como booleano é um apelido para tinyint (1), isso significa que você pode definir booleanos para números diferentes de 0 e 1 e não irá reclamar! O que significa que, se você acidentalmente incrementar ou diminuir o campo, poderá atrapalhar seus dados! : -O Eu recomendo usar um campo ENUM.
tu restabelece Monica-dor duh
3
"Bem-sucedido" e "verdadeiro" são coisas completamente ortogonais. Os códigos de erro não são booleanos.
Matthew Leia
14

Use ENUM no MySQL para true / false que fornece e aceita valores true / false sem nenhum código extra.

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

Você pode definir um valor padrão no momento da criação, como:

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

Se você estiver tornando a coluna booleana como não nula, o valor padrão será "false"; você não precisa especificá-lo explicitamente.

Tech Junkie
fonte