MySQL中int(n)后面的n到底代表的是什么意思

你可能已经知道int(1)这个长度1并不代表允许存储的宽度!

但对这个长度很多人也没有真正研究过到底代表什么,今天我就来简单的分析一下!

先看一个简单的建表小案例:

create table test(
 id int(11) unsigned NOT NULL AUTO_INCREMENT,
 uid int(3) NOT NULL,
 PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

这里以uid字段为例,我们这里设置的是int(3)

那么问题来了 难道我们设置int(3),就不能存放数据1234了?

那么你完全可以测试一下 输入如下SQL语句

insert into `test` (`uid`) VALUES(1234);
insert into `test` (`uid`) VALUES(12345678);

结果图如下:

小伙伴们通过上面的SQL语句可以发现 成功把数据1234插入, 并且我们还可以插入存放更多位的数据! 这是为什么呢? 看下面

原因如下:

这个int(n)我们可以简单的理解为:

这个长度是为了告诉MySQL数据库,我们这个字段的存储的数据的宽度为n位数, 当然如果你不是存储的n位数, 但是(只要在该类型的存储范围之内)MySQL也能正常存储!

那么我们可以从新来建立test2表, 然后这一次我们把uid字段加上:  unsigned 和 zerofill  这两个字段约束

==字段约束会在后面详细讲到==

MySQL代码如下:

create table test2(
 id int(11) unsigned NOT NULL AUTO_INCREMENT,
 uid int(3) unsigned zerofill NOT NULL,
 PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

现在我的uid字段:长度(n)=3, 字段约束=unsigned 和 zerofill   备: (无符号约束 和 用0来填充位数约束)

设置这个约束的字段后,再往表时插入数据,系统会自动把uid字段不够3位的在左侧用0来填充

小伙伴完全可以测试一下代码:  向uid字段插入一个33的数字

insert into `test2` (`uid`) VALUES(33);

结果图 如下:

大家是不是惊奇的发现不足长度3的时候, 真的用0来 从左边开始填充!  哈哈哈

所以:现在我们应该清楚的知道,int后的长度n 与你存放的数值型的数的大小无关!

==小结:== 

在定义表字段数据类型为int类型的时候,后面的长度n所代表的长度是没有任何意义的, 只要在该类型的存储范围之内MySQL也能正常存储!  如果一定要左侧补0 那么这个字段必须要有zerofill约束和unsigned 无符号约束!

到此这篇关于MySQL中int(n)后面的n到底代表的是什么意思 的文章就介绍到这了,更多相关MySQL int(n)内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • mysql修改自增长主键int类型为char类型示例

    原来有一个表中的主键是int自增长类型, 因为业务变化需要把int改成char类型的主键.同时因为原来的表中已经存在了数据,不能删除表重建,只能修改表结构. 首先去掉自增长属性: alter table table_name  change indexid indexid int; 然后去掉主键: ALTER TABLE table_name   DROP   primary key; 修改表结构为char类型: alter table table_name change indexid ind

  • MySQL INT类型全解析

    前言: 整型是MySQL中最常用的字段类型之一,通常用于存储整数,其中int是整型中最常用的,对于int类型你是否真正了解呢?本文会带你熟悉int类型相关知识,也会介绍其他整型字段的使用. 1.整型分类及存储范围 整数类型 字节 有符号范围 无符号范围 TINYINT 1 -128 ~ 127 0 ~ 255 SMALLINT 2 -32768 ~ 32767 0 ~ 65535 MEDIUMINT 3 -8388608 ~ 8388607 0 ~ 16777215 INT/INTEGER 4

  • Mysql数据库中把varchar类型转化为int类型的方法

    在上篇文章给大家讲了MySQL数据库中把int转化varchar引发的慢查询,本文给大家介绍Mysql数据库中把varchar类型转化为int类型的方法,一起看看吧! mysql为我们提供了两个类型转换函数:CAST和CONVERT,现成的东西我们怎能放过? CAST() 和CONVERT() 函数可用来获取一个类型的值,并产生另一个类型的值. 这个类型 可以是以下值其中的 一个: BINARY[(N)] CHAR[(N)] DATE DATETIME DECIMAL SIGNED [INTEG

  • MySQL中int(n)后面的n到底代表的是什么意思

    你可能已经知道int(1)这个长度1并不代表允许存储的宽度! 但对这个长度很多人也没有真正研究过到底代表什么,今天我就来简单的分析一下! 先看一个简单的建表小案例: create table test( id int(11) unsigned NOT NULL AUTO_INCREMENT, uid int(3) NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 这里以uid字段为例,我们这里设置的是int(3

  • mysql中int(3)和int(10)的数值范围是否相同

    目录 提问: 回答: 真实情况: 知识点 结论: 总结 提问: mysql的字段,unsigned int(3), 和unsinged int(6), 能存储的数值范围是否相同.如果不同,分别是多大? 回答: 不同,int(3)最多显示3位无符号整体,int(6)最多显示6位无符号数. 如果你的答案和上面的一致,恭喜你和我犯了一样的错误. 真实情况: int类型整数占4个字节,有符号的范围为:-2^31 ~ 2^31-1,无符号整数范围为:0 ~ 2^32-1,既然都是无符号整数,那么存储范围是

  • MySQL中int (10) 和 int (11) 的区别

    mysql 中整数数据类型: 不同类型的取值范围: 不同数据类型的默认v显示宽度: 显示的宽度跟负号没有关系,它只在人工设置了 ZEROFILL 属性有效.一旦人工设置了 ZEROFILL 属性,MySQL 会自动设置 UNSIGNED 属性(即 ZEROFILL 不能存储负数). 那取值范围和显示宽度到底有什么关系呢?利用 tinyint 做了个实验, 首先创建一张表如下: mysql> desc test_integer; +-----------+------------+------+-

  • MySQL中int(10)和int(11)的区别详解

    目录 一.背景 二.MySQL整数类型 总结: 一.背景 在创建数据库表的时候,我们经常会用到int(x)来定义一个字段的类型,一直误以为这里的x表示存储数字的长度. 其实大错特错,这里的 x 指的是 最大显示宽度(最大有效显示宽度是255),且显示宽度与存储大小或类型包含的值的范围无关. 二.MySQL整数类型 类型 字节 取值范围 显示宽度 tinyint 1 -128 ~ 127 4 smallint 2 -32768 ~ 32767 6 mediumint 3 -8388608 ~ 83

  • 浅谈mysql中int(1)和int(10)的区别

    目录 困惑 数据说话 零填充 总结 困惑 最近遇到个问题,有个表的要加个user_id字段,user_id字段可能很大,于是我提mysql工单alter table xxx ADD user_id int(1).领导看到我的sql工单,于是说:这int(1)怕是不够用吧,接下来是一通解释. 其实这不是我第一次遇到这样的问题了,其中不乏有工作5年以上的老司机.包括我经常在也看到同事也一直使用int(10),感觉用了int(1),字段的上限就被限制,真实情况肯定不是这样. 数据说话 我们知道在mys

  • MySQL中int最大值深入讲解

    导语 前两天看到的问题,展开写一下. 字节 我们都知道计算机是以二进制为基础.存储的基本单位是 Bit,也称为比特.二进制位.1bit 可以表示 0 或者 1 两个数字,是可能存在的最小的信息量,任何小于1 bit 的内容都算不上信息. 复杂的内容就要用多 bit 来表示.Byte ,也称为字节,通常用作计量单位.1 byte 等于 8 bit,即 1 byte 可以表示 28 内容. MySQL 中的字节 先说明一下,在 MySQL 中的整数类型,可以分为 unsigned 和 signed

  • mysql中int、bigint、smallint 和 tinyint的区别详细介绍

    最近使用mysql数据库的时候遇到了多种数字的类型,主要有int,bigint,smallint和tinyint.其中比较迷惑的是int和smallint的差别.今天就在网上仔细找了找,找到如下内容,留档做个总结: 使用整数数据的精确数字数据类型. bigint 从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字).存储大小为 8 个字节. P.S. bigint已经有长度了,在mysql建表中的len

  • 对比MySQL中int、char以及varchar的性能

    网络上有许多似是而非的"谣言",当然都不是恶意,绝大部分都是开发者不愿意自己主动研究,反而轻信其他人的信口之言. 关于数据库的谣言也有不少,比如"int性能比char高很多". 我最近针对int.long.char.varchar进行了一次性能测试,发现它们其实并没有太大的性能差距: 备注:c8=char(8), s8=varchar(8), i8=(bigint), c4=char(4), s4=varchar(4), i4=char(4) 100w行无索引情况下

  • 详细深入聊一聊Mysql中的int(1)和int(11)

    目录 前言 正文 java mysql 总结 前言 首先在吐槽这个现象前,我先说下我们该篇的内容. 1.  int 类型表字段 在mysql数据库里面,到底存值的范围是多少 ? 什么时候是  -2147483648到 2147483647   什么时候是 0 到4294967295 2. int (1) int(11) 这个括号后面的玩意,对于int来说 作用是什么? int(1) 就只能存入 0,1,2,3,4,5,6,7,8,9 吗?是这样理解??? 我存个10不行? 可能对这些概念很清晰的

  • 一文介绍mysql中TINYINT取值范围

    目录 项目场景: 问题描述: 原因分析: 解决方案: 项目场景: 最近在开发过程中,看见表设计中是thinyint字段,但对于它的范围产生了好奇 问题描述: 当我们填写超过128数值的时候,该字段就会报以下错误 Cause:com.mysql.jdbc.MysqlDataTruncation:Data truncation:Out of range value for column 'priority' at row 1; 原因分析: 从 -2^7 (-128) 到 2^7 - 1 (127)

随机推荐