2010-02-08 35 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'