デフォルト値としてfalseを使用してMySQLにブール列を作成しますか?


127

MySQLで、booleanデフォルト値がである列を持つテーブルを作成したいと思いますfalse。しかし、デフォルトとしてNULLを受け入れています...

回答:


202

デフォルトとして(0falseを意味する)または1(trueを意味する)を指定する必要があります。次に例を示します。

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)

参考:私のテストは次のバージョンのMySQLで行われました:

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

2
それとも?シェルスクリプトでは、0は成功または「true」を意味します。MySQLが実際に「true」と「false」を返したので、値が何を意味するかを決定するコードに依存する必要がなかったとしたらすばらしいでしょう。
tu-Reinstate Monica-dor duh 2015年

3
ちなみに、ブール値はtinyint(1)のエイリアスなので、ブール値を0と1以外の数値に設定しても問題はありません。つまり、フィールドを誤ってインクリメントまたはデクリメントすると、データが台無しになる可能性があります。:-O代わりにENUMフィールドを使用することをお勧めします。
tu-Reinstate Monica-dor duh 2015年

3
「成功」と「真」は完全に直交するものです。エラーコードはブール値ではありません。
Matthew Read

14

MySQLのENUMをtrue / falseに使用して、余分なコードなしで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

booleanカラムをnull以外として作成する場合、デフォルトの 'default'値はfalseです。明示的に指定する必要はありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.