MySQL 中的 int(11) 到底代表什么意思?

Posted wgchen~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL 中的 int(11) 到底代表什么意思?相关的知识,希望对你有一定的参考价值。

前言

在工作中经常要与 mysql 打交道,但是对 mysql 的各个字段类型一直都是一知半解,因此写本文总结记录一番。

简介


对于 int 类型的一些基础知识其实上图已经说的很明白了,
在这里想讨论下常用的 int(11) 代表什么意思,
很长时间以来我都以为这代表着限制 int 的长度为 11 位,
11 代表的并不是长度,
而是字符的显示宽度,
在字段类型为 int 时,
无论你显示宽度设置为多少,
int 类型能存储的最大值和最小值永远都是固定的。


所以无论怎么设置 int 类型的显示宽度,int 所能存储的最大值和最小值是固定的,那么这个显示宽度到底有什么用呢?

当 int 字段类型设置为无符号且填充零(UNSIGNED ZEROFILL)时,当数值位数未达到设置的显示宽度时,会在数值前面补充零直到满足设定的显示宽度,为什么会有无符号的限制呢,是因为 ZEROFILL 属性会隐式地将数值转为无符号型,因此不能存储负的数值。

代码示例

CREATE TABLE int_demo (
    id INT(11) NOT NULL AUTO_INCREMENT,
    a INT(11) NOT NULL,
    b INT(11) UNSIGNED ZEROFILL NOT NULL,
    c INT(5) DEFAULT NULL,
    d INT(5) UNSIGNED ZEROFILL NOT NULL,
    e INT(15) DEFAULT NULL,
    PRIMARY KEY (`id`)
)

INSERT INTO int_demo (a, b, c, d, e) VALUES (1, 1, 1, 1, 1);

INSERT INTO int_demo (a, b, c, d, e) 
VALUES (1234567890, 1234567890, 1234567890, 1234567890, 1234567890);
select * from int_demo;

+----+------------+-------------+------------+------------+------------+
     |int(11) 		int(11) 	 int(5)  		int(5)  	int(15) 
      not null		unsigned     default null   unsigned    default null
      				zerofill 					zerofill 
      				not null					not null
+----+------------+-------------+------------+------------+------------+
| id | a          | b           | c          | d          | e          |
+----+------------+-------------+------------+------------+------------+
|  1 |          1 | 00000000001 |          1 |      00001 |          1 |
|  2 | 1234567890 | 01234567890 | 1234567890 | 1234567890 | 1234567890 |
+----+------------+-------------+------------+------------+------------+
2 rows in set (0.01 sec)

注释:如果用 navicate 软件查询出来并不会显示左边的 0,但把数据导出时可看到真实的数据,猜测是软件对数据格式进行了处理。

结论

从上个例子我们可以得出以下几个结论:

1、如果一个字段设置了无符号和填充零属性,那么无论这个字段存储什么数值,数值的长度都会与设置的显示宽度一致,如上述例子中的字段 b,插入数值 1 显示为00000000001,左边补了 10 个零直至长度达到 11 位;

2、设置字段的显示宽度并不限制字段存储值的范围,比如字段 d 设置为 int(5),但是仍然可以存储 1234567890 这个 10 位数字;

3、设置的字符宽度只对数值长度不满足宽度时有效,如 d 字段 int(5),插入 1 时,长度不足 5,因此在左边补充 4 个零直到 5 位,但是插入 1234567890 时超过了 5 位,这时的显示宽度就起不了作用了。

以上是关于MySQL 中的 int(11) 到底代表什么意思?的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL 中的 int(11) 到底代表什么意思?

mysqlint类型的长度值mysql在建表的时候int类型后的长度代表什么

mysql中的varchar(10)和 int(11)是什么意思?

关于mysql中int中int后面的数字(转发)

int(11)中的11是什么意思

mysql 中的 int(n)