Создать логический столбец в MySQL со значением по умолчанию false?


127

Я хочу создать таблицу в MySQL со booleanстолбцом, значение по умолчанию которого false. Но по умолчанию он принимает NULL ...

Ответы:


202

Вы должны указать 0(значение false) или 1(значение true) по умолчанию. Вот пример:

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

К вашему сведению: booleanэто псевдоним для tinyint(1).

Вот доказательство:

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)

К вашему сведению: мой тест проводился на следующей версии MySQL:

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

2
Или нет? В сценариях оболочки 0 может означать успешный или «истинный». Было бы неплохо, если бы MySQL действительно возвращал «истина» и «ложь», чтобы нам не приходилось полагаться на код, решающий, что означает значение.
tu-Reinstate Monica-dor duh

3
Между прочим, поскольку логическое значение является псевдонимом для tinyint (1), это означает, что вы можете устанавливать логические значения на числа, отличные от 0 и 1, и он не будет жаловаться! Это означает, что если вы случайно увеличите или уменьшите значение поля, вы можете испортить свои данные! : -O Я бы рекомендовал вместо этого использовать поле ENUM.
tu-Reinstate Monica-dor duh

3
«Успешное» и «истинное» - вещи полностью ортогональные. Коды ошибок не являются логическими.
Мэтью Рид

14

Используйте ENUM в MySQL для истинности / ложности, он дает и принимает значения истина / ложь без какого-либо дополнительного кода.

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

11

Вы можете установить значение по умолчанию во время создания, например:

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

1

Если вы делаете логический столбец ненулевым, тогда значение по умолчанию по умолчанию - false; вам не нужно явно указывать это.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.