2010-02-08 54 views

回答

152

您必須指定0(意思是false)或1(意思是true)作爲默認值。下面是一個例子:

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

供參考:booleantinyint(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) 
+3

尼斯確認 – 2012-09-25 11:58:02

+0

還是呢?在shell腳本中,0可以表示成功或'true'。如果MySQL實際返回'true'和'false',那麼我們就不必依賴代碼來決定這個值的含義了。 – tudor 2015-05-28 03:17:32

+3

順便提一句,由於布爾值是tinyint(1)的別名,這意味着您可以將布爾值設置爲除0和1之外的其他值,並且不會發生抱怨!這意味着如果你意外地增加或減少了字段,那麼你可以搞砸你的數據! :-O我建議使用ENUM字段。 – tudor 2015-05-28 03:21:03

8

使用ENUM在MySQL真/假它給並接受真正的/錯誤的值沒有任何額外的代碼。

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