登录
首页 >  数据库 >  MySQL

MySQL Integer类型与INT(11)详解

来源:SegmentFault

时间:2023-01-28 10:10:36 117浏览 收藏

亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《MySQL Integer类型与INT(11)详解》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下MySQL、integer,希望所有认真读完的童鞋们,都有实质性的提高。

MySQL支持的整数类型有TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT。

每种整数类型所需的存储空间和范围如下:

类型字节最小值(有符号)最大值(有符号)最小值(无符号)最大值(无符号)
TINYINT1-1281270255
SMALLINT2-3276832767065535
MEDIUMINT3-83886088388607016777215
INT4-2147483648214748364704294967295
BIGINT8-9223372036854775808(9223372036854775807018446744073709551615

有无限制的区别

在创建数据表时,通常会看见

int(11)
int
这样的写法,这两者有什么区别,各自又代表什么意思呢?
  1. 对应Integer 类型而言,仅表示字段的显示宽度。
  2. 对于DECIMAL类型,表示数字的总数。
  3. 对于字符字段,这是可以存储的最大字符数,例如VARCHAR(20)可以存储20个字符。

显示宽度并不影响可以存储在该列中的最大值。

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

总结

  1. 对于Integer 类型而言,“数字”并不会限制其能存储的最大范围。
  2. 有无符号,不仅会限制其能存储的最大范围,还可以配置“数字”自动补零。

参考链接

文中关于mysql的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《MySQL Integer类型与INT(11)详解》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表