文章目录
一. 背景
- 在设计数据库表的时候,如果字段是数值型,经常会有几个选项(
tinyint [unsigned]
、smallint [unsigned]
、mediumint [unsigned]
、int [unsigned]
、bigint [unsigned]
),但总不知道该使用哪个类型,下面总结了一下。
二. INT类型的总结
1. 概述
数值类型 | 占用字节 | 数据范围 | 无符号数据范围 |
---|
tinyint | 1 | -128~127 | 0~255 |
smallint | 2 | -32768~32767 | 0~65535 |
mediumint | 3 | -8388608~8388607 | 0~16777215 |
int | 4 | -2147483648~2147483647 | 0~4294967295 |
bigint | 8 | -9223372036854775808~9223372036854775807 | 0~18446744073709551615 |
2. 详述
- 说明:1 bytes = 8 bit,因此一个字节最多可以代表的数据长度是2的8次方(11111111),转换为实际值即-128到127。
2.1 bit[M]
- 概述:位字段类型。
- M:表示每个值包含的位数,如bit(2)表示包含2位的一个值。M的范围是[1,64],如果M缺省,默认为1。
2.2 TINYINT([M])[unsigned][zerofill]
- 概述:很小的整数。
- M:默认为4。
- 数值范围
- 带符号的范围:-128到127
- 无符号的范围:0到255
- boolean类型:是TINYINT(1)的同义词。0值被视为假;非0值视为真。
2.3 SMALLINT([M])[unsigned][zerofill]
- 概述:小的整数。
- M:默认为6。
- 数值范围
- 带符号的范围: -32768到32767
- 无符号的范围:0到65535
2.4 MEDIUMINT([M])[unsigned][zerofill]
- 概述:中等大小的整数。
- M:默认为9。
- 数值范围
- 带符号的范围: -8388608到8388607
- 无符号的范围:0到16777215
2.5 INT([M])[unsigned][zerofill]
- 概述:普通大小的整数。
- M:默认为11。
- 数值范围
- 带符号的范围: -2147483648到2147483647
- 无符号的范围:0到4294967295
2.6 BIGINT([M])[unsigned][zerofill]
- 概述:大整数。
- M:默认为20。
- 数值范围
- 带符号的范围: -9223372036854775808到9223372036854775807
- 无符号的范围:0到18446744073709551615
3. 说明
- M的含义:并不是指存储在数据库中的具体长度。只有同时指定了zerofill,M才会发挥作用,即左边用0来填充。
- 示例:tinyint(1)和tinyint(2)的区别
CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`state1` tinyint(1) unsigned zerofill DEFAULT NULL,
`state2` tinyint(2) unsigned zerofill DEFAULT NULL,
`state3` tinyint(3) unsigned zerofill DEFAULT NULL,
`state4` tinyint(4) unsigned zerofill DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8
insert into test (state1,state2,state3,state4) values(4,4,4,4);
select * from test;
id | state1 | state2 | state3 | state4 |
---|
1 | 4 | 04 | 004 | 0004 |
参考资料