MySQL BOOLEAN && BOOL
如下所示建立schema,
drop table boolean_test;
CREATE TABLE boolean_test(
ID INT NOT NULL AUTO_INCREMENT,
flag1 BOOL,
flag2 BOOLEAN,
PRIMARY KEY(ID)
)ENGINE=InnoDB;
好了,运行一下show create table,如下,
CREATE TABLE `boolean_test` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`flag1` tinyint(1) DEFAULT NULL,
`flag2` tinyint(1) DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
你可以看到,bool类型被自动转换成了 tinyint,看如下插入语句,
insert into boolean_test (flag1,flag2) values (true,false);
insert into boolean_test (flag1,flag2) values (1,0);
insert into boolean_test (flag1,flag2) values (1111111,888888);
最后会报这样的错误,
[Error Code: 1264, SQL State: 22001] Data truncation: Out of range value for column 'flag1' at row 1
超出了 tinyint 的范围。如下,查询示例,
mysql> select * from boolean_test;
+----+-------+-------+
| ID | flag1 | flag2 |
+----+-------+-------+
| 1 | 1 | 0 |
| 2 | 1 | 0 |
+----+-------+-------+
2 rows in set (0.00 sec)
在mysql 客户端中显示1和0
================END================
1.BIT[M]
位字段类型,M表示每个值的位数,范围从1到64,如果M被忽略,默认为1
2.TINYINT[(M)] [UNSIGNED] [ZEROFILL] M默认为4
很小的整数。带符号的范围是-128到127。无符号的范围是0到255。
3. BOOL,BOOLEAN
是TINYINT(1)的同义词。zero值被视为假。非zero值视为真。
4.SMALLINT[(M)] [UNSIGNED] [ZEROFILL] M默认为6
小的整数。带符号的范围是-32768到32767。无符号的范围是0到65535。
5.MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL] M默认为9
中等大小的整数。带符号的范围是-8388608到8388607。无符号的范围是0到16777215。
6. INT[(M)] [UNSIGNED] [ZEROFILL] M默认为11
普通大小的整数。带符号的范围是-2147483648到2147483647。无符号的范围是0到4294967295。
7.BIGINT[(M)] [UNSIGNED] [ZEROFILL] M默认为20
大整数。带符号的范围是-9223372036854775808到9223372036854775807。无符号的范围是0到18446744073709551615。
================END================