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

异步蝉翼
• 阅读 42799

一、前言

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

二、简介

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

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

The number in the parenthesis does not determines the max and min values that can be stored in the integer field. The max and min values that can be stored are always fixed.

The display width of the column does not affects the maximum value that can be stored in that column. A column with INT(5) or INT(11) can store the same maximum values. Also, if you have a column INT(20) that does not means that you will be able to store 20 digit values (BIGINT values). The column still will store only till the max values of 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;
id a b c d e
1 1 00000000001 1 00001 1
2 1234567890 01234567890 1234567890 1234567890 1234567890

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

三、结论

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

  1. 如果一个字段设置了无符号和填充零属性,那么无论这个字段存储什么数值,数值的长度都会与设置的显示宽度一致,如上述例子中的字段b,插入数值1显示为00000000001,左边补了10个零直至长度达到11位;
  2. 设置字段的显示宽度并不限制字段存储值的范围,比如字段d设置为int(5),但是仍然可以存储1234567890这个10位数字;
  3. 设置的字符宽度只对数值长度不满足宽度时有效,如d字段int(5),插入1时,长度不足5,因此在左边补充4个零直到5位,但是插入1234567890时超过了5位,这时的显示宽度就起不了作用了。
点赞
收藏
评论区
推荐文章
Johnny21 Johnny21
4年前
msyql备份
MySQL备份的几种方式最近一直想写点博客,但是不知道写什么,感觉自己最近的知识没有什么增加,今天想到了一篇可以写的博客。以前试过根据data文件夹备份MySQL,但是从来没有成功过,前几天帮助朋友还原MySQL,终于成功的将备份的data文件夹还原成功了。MySQL数据库算是常用的数据库中最好使用的数据库了,对于备份的操作也不例外。所以今天分享一下
Wesley13 Wesley13
3年前
Mysql系列第二讲 详解mysql数据类型(重点)
Mysql系列第二讲MySQL的数据类型整数类型示例1:有符号类型示例2:无符号类型类型(n)说明示例1(重点)示例2日期类型字符串类型mysql类型和java类型对应关系数据类型选择的一些建议MySQL的数据类型
Wesley13 Wesley13
3年前
MySQL总结
mysql数据库字段类型在mysql中包含的数据类型很多,这里主要列出来常用的几种数字:int(整数),decimal(浮点数)字符串:char(不可改变字符数),varchar(有限长度,可变字符    数),text(大文本)约束
Wesley13 Wesley13
3年前
MySQL中关于数据类型指定宽度之后的情况
概述  MySQL有很多种数据类型,最常用的就是int,char,varchar,这些类型在创建表的时候都可以指定该字段的宽度,方法是在类型后面加一个括号,括号中写宽度就可以了。  但是,在指定宽度之后,有时候,我们可以看到插入的数据有一些被截断了;有一些并没有截断,而是四舍五入了,甚至什么操作都没有,原样插入了。  下面对于每一种数据类型
Wesley13 Wesley13
3年前
mysql常用命令
mysql常用命令——删除主键,添加新主键【适用于以前主键不是id的场景】altertable表名change现在主键名现在主键名int(11);altertable表名dropprimarykey;altertable表名addCOLUMN新主键名INT(11)NOTNUL
Wesley13 Wesley13
3年前
MySQL IN语法注意事项一则
最近发现mysql中,Int型字段的默认值会直接影响IN语法的查询。如test表有个字段uid为int类型,默认值如果允许NULL,则下面的代码统计会不正确。//返回110条记录SELECTcount(1)FROMtest//若返回2条数据SELECT
Wesley13 Wesley13
3年前
MySQL数据库DDL、DML详解
一、MySQL数据库数据类型<1MySQL数据库中支持多种数据类型数值型字符型日期型<2常用的数据类型整型int:整型,存储整数int(M):M表示预期值,与存储大小和数值的范围无关idi
Wesley13 Wesley13
3年前
mysql的这几个坑你踩过没?真是防不胜防
一、前言对于从事互联网开发的同学来说,mysql可谓是再熟悉不过的了。无论是DBA、开发或测试,基本上天天要跟它打交道,很多同学可能已经身经百战了。但是,笔者遇到过的这些坑不知道你们都经历过没?二、有符号和无符号以前我们公司在项目开发之初制定开发规范时,对mysql的int类型字段定义成有符号,还是无符号问题专门讨论
Stella981 Stella981
3年前
Python基础(一)
1.基础类型python的数据类型可以分为两种,一种是内置的,一种是其他包中的,内置的数据类型可以分为10种:(1)整数用int表示,强制转换函数为int():x10print(x)int(10.88)输出都是10.!在这里插入图片描述(https://img
Wesley13 Wesley13
3年前
MySQL索引背后的数据结构及算法原理
摘要本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MySQL时主要打交道的索引,至于哈希索引和全文索引本文
3A网络 3A网络
2年前
MySQL 中存储时间的最佳实践
平时开发中经常需要记录时间,比如用于记录某条记录的创建时间以及修改时间。在数据库中存储时间的方式有很多种,比如MySQL本身就提供了日期类型,比如DATETIME,TIMESTAMEP等,我们也可以直接存储时间戳为INT类型,也有人直接将时间存储为字符串类型。那么到底哪种存储时间的方式更好呢?不要使用字符串存储时间类型这是初学者很容易犯的错误,