MySQL Integer类型与INT(11)详解
码农天地 -MySQL支持的整数类型有TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT。
每种整数类型所需的存储空间和范围如下:
类型字节最小值(有符号)最大值(有符号)最小值(无符号)最大值(无符号)TINYINT1-1281270255SMALLINT2-3276832767065535MEDIUMINT3-83886088388607016777215INT4-2147483648214748364704294967295BIGINT8-9223372036854775808(9223372036854775807018446744073709551615有无限制的区别在创建数据表时,通常会看见 int(11)
和int
这样的写法,这两者有什么区别,各自又代表什么意思呢?
显示宽度并不影响可以存储在该列中的最大值。int(3)
和int(11)
所能存储的最大范围是一样的。
将某个字段设置成INT(20)
并不意味着将能够存储20位数字,这个字段最终能存储的最大范围还是 INT 的范围。
创建一张临时表:
CREATE TABLE tmp_table_a (
id INT(3) NOT NULL AUTO_INCREMENT,
name varchar(16) DEFAULT '' NOT NULL,
PRIMARY KEY (`id`)
);
查看表结构:
mysql> desc tmp_table_a;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(3) | NO | PRI | NULL | auto_increment |
| name | varchar(16) | NO | | | |
+-------+-------------+------+-----+---------+----------------+
插入超过"长度"的数字:
INSERT INTO tmp_table_a(id, name) VALUES(123456, "boo");
查看结果,发现数字并没有插入失败:
mysql> select * from tmp_table_a;
+--------+------+
| id | name |
+--------+------+
| 123456 | boo |
+--------+------+
1 row in set (0.00 sec)
有无符号的区别那么问题来了,既然加不加数字并没有什么区别,那为什么还多此一举呢?
这是因为“正常”情况下确实没有什么区别,只有当字段设置为UNSIGNED ZEROFILL 属性时,为INT 增加数字才会有意义。
表示如果要存储的数字少于N 个字符,则这些数字将在左侧补零。
示例创建一张 UNSIGNED ZEROFILL 的数据表:
CREATE TABLE tmp_table_b (
id INT(3) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT,
name varchar(16) DEFAULT '' NOT NULL,
PRIMARY KEY (`id`)
);
查看表结构:
mysql> desc tmp_table_b;
+-------+--------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------------------+------+-----+---------+----------------+
| id | int(3) unsigned zerofill | NO | PRI | NULL | auto_increment |
| name | varchar(16) | NO | | | |
+-------+--------------------------+------+-----+---------+----------------+
插入记录:
INSERT INTO tmp_table_b(id, name) VALUES(1, "boo");
查看记录:
mysql> select * from tmp_table_b;
+-----+------+
| id | name |
+-----+------+
| 001 | boo |
+-----+------+
总结对于Integer 类型而言,“数字”并不会限制其能存储的最大范围。有无符号,不仅会限制其能存储的最大范围,还可以配置“数字”自动补零。参考链接MySQL Integer类型与INT(11) 特别申明:本文内容来源网络,版权归原作者所有,如有侵权请立即与我们联系(cy198701067573@163.com),我们将及时处理。
上一篇: 基于ECS搭建云上博客