首先来看看不同类型的长度和大小限制
类型 | 所占字节数 | 大小或长度 |
---|---|---|
byte | 1字节 | -128(-2^7)~ 127(2^7-1) |
boolean | 至少1字节 | 这种类型只作为一种标志来记录 true/false 情况 |
short | 2字节 | -32768(-2^15) ~ 32767(2^15 - 1) |
char | 2字节 | \u0000(即为0) ~ \uffff(即为65,535) |
int | 4字节 | -2,147,483,648(-2^31) ~ 2,147,483,647(2^31 - 1) |
float | 4字节 | 单精度浮点数字长32位,尾数长度23,指数长度8,指数偏移量127 |
long | 8字节 | -9,223,372,036,854,775,808(-2^63) ~ 9,223,372,036,854,775,807(2^63 -1) |
double | 8字节 | 双精度浮点数字长64位,尾数长度52,指数长度11,指数偏移量1023 |
再看看下面的例子
mysql创建一个表,看下面的截图
DROP TABLE IF EXISTS `tb_areainfo`;
CREATE TABLE `tb_areainfo` (
`id` int(5) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`parentId` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
发现问题了么?int(5)但却有一个7位数的数据,而且正常存储…
原因
在SQL语句中int代表你要创建字段的类型,int代表整型:
- 这个5代表显示宽度,整数列的显示宽度与mysql需要用多少个字符来显示该列数值,与该整数需要的存储空间的大小都没有关系,比如,不管设定了显示宽度是多少个字符,bigint都要占用8个字节。
- int是整型,(5)是指显示字符的长度,最大显示长度为255,声明整型数据列时,我们可以为它指定个显示宽度M(1~255),如INT(5),指定显示宽度为5个字符,如果没有给它指定显示宽度,MySQL会为它指定一个默认值,如果长度不足,它会在前面加0,显示宽度只用于显示,并不能限制取值范围和占用空间,如:INT(5)会占用4个字节的存储空间,并且允许的最大值也不会是99999,而是 INT整型所允许的最大值。
- MySQL有五种整型数据列类型,即TINYINT,SMALLINT,MEDIUMINT,INT和BIGINT。它们之间的区别是取值范围不同,存储空间也各不相同。
所以INT(M)是它的显示长度(要想要自动补充0的话,就需要加上ZEROFILL参数),不是它的存储长度,存储长度限制还是取决与类型的最大的长度。