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================