专栏首页黑泽君的专栏【MySQL 】MySQL 中的 int(11) 到底代表什么意思?

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

一、前言

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

二、简介

  对于 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;

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

三、结论

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

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

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

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

四、参考链接

https://segmentfault.com/a/1190000012479448

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 在Global.asax中获取Session的注意事项

    几年前给朋友珠宝公司开发过一套旺财珠宝库存管理系统,用得还是web Form老技术,但是更多的走Ashx+Ajax,但前端可是HTML5+jQuery+Boot...

    崔文远TroyCui
  • 运维案例 | Exchange2010数据库损坏的紧急修复思路

    Exchange后端数据库故障,一般都会是比较严重的紧急故障,因为这会直接影响到大面积用户的正常使用,而且涉及到用户数据。一旦遇到这种级别的故障,管理员往往都需...

    嘉为科技
  • 旺财C# .NET代码生成器支持DTcms MySQL版生成了

    昨天跟一资深老用户沟通之后,发现DTcms MySql版用得人越来越多了,整个运行于Linux主机下,比一定要Windows和MSSQL数据库的要求降低了很多,...

    崔文远TroyCui
  • 4️⃣ 核酸序列特征分析(7):限制性内切酶位点分析

    限制性内切酶,简称限内酶,是生物体内的可以将异源性DNA切断的一类酶,这可以限制异源DNA的侵入并使之失活,但对自身DNA没有损伤,可以维持细胞原有遗传信息的完...

    Y大宽
  • 微软MSSQL(SQL Server)的版本及Express版的连接字符串

    今天体验了一下SQL SERVER 2017 Express版本,将MSSQL 2008 R2的数据库附加到新版本,发现从2008跳到2017的中间版本还真多。

    崔文远TroyCui
  • 分布式系统(微服务架构)的一致性和幂等性问题相关概念解析

    什么是分布式系统?关于这点其实并没有明确且统一的定义。在我看来,只要一个系统满足以下几点就可以称之为分布式系统

    java架构师
  • #0002:Saas模式提了那么多年,为何还不能被中国企业接受

    话说SaaS在国外很流行,国内也有很多应用很火,但一牵涉到企业级应用,就会发现企业还是不买单,宁愿独立部署版。

    崔文远TroyCui
  • MLSQL 控制台预览版 推出啦

    一个MLSQL Engine启动后就是一个MLSQL实例,通常我们需要启动多个MLSQL实例,做Load Balance 或者为不同业务线准备。 MLSQL C...

    用户2936994
  • 用装饰者模式封装数据库操作

    对于python编程人员来说,经常会用pymysql操作数据库。利用sql语句操作数据库时经常会有些额外的操作,比如说打印sql语句,记录sql查询时间,统计业...

    YG
  • ServiceFramework作为Java Web框架都有哪些不错的设计

    最近需要开发一个纯API的项目,mlsql-cluster,从无到有,到最后完整的proxy功能开发完毕,只花了四个小时不到,自己不尽小感叹了一把 Servic...

    用户2936994

扫码关注云+社区

领取腾讯云代金券