Створити логічний стовпчик у MySQL з false як значення за замовчуванням?


127

Я хочу створити таблицю в MySQL зі booleanстовпцем, значенням якого за замовчуванням є false. Але він приймає NULL за замовчуванням ...

Відповіді:


202

Ви повинні вказати 0(означає false) або 1(що означає істину) як за замовчуванням. Ось приклад:

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

FYI: 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)

FYI: Мій тест був зроблений на наступній версії MySQL:

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

2
Або це? У сценаріях оболонок 0 може означати успіх або "правду". Було б добре, якби MySQL насправді повернув значення "true" і "false", щоб нам не довелося покладатися на код, який вирішує, що означає значення.
tu-Reinstate Monica-dor duh

3
Між іншим, оскільки boolean є псевдонімом для tinyint (1), це означає, що ви можете встановити булеві числа на інші числа, ніж 0 і 1, і він не скаржиться! Що означає, якщо ви випадково зросте або зменшите поле, то ви можете зіпсувати свої дані! : -Я рекомендую замість цього використовувати поле ENUM.
tu-Reinstate Monica-dor duh

3
"Успішні" та "справжні" - це абсолютно ортогональні речі. Коди помилок не є булевими.
Матвій

14

Використовуйте ENUM в MySQL для істинного / хибного значення, яке дає та приймає значення true / false без зайвого коду.

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

Якщо ви робите булевий стовпець як недійсний, то значення 'default' за замовчуванням є false; не потрібно чітко вказувати це.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.