【MySQL】int数据类型后面的n你到底知不知道代表的是什么?

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: MySQL这些细节怪,你真的玩明白了吗?

🚀 个人主页 极客小俊
✍🏻 作者简介:web开发者、设计师、技术分享博主
🐋 希望大家多多支持一下, 我们一起进步!😄
🏅 如果文章对你有帮助的话,欢迎评论 💬点赞👍🏻 收藏 📂加关注

logo.png

你可能已经知道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);

结果图如下:

1.png

小伙伴们通过上面的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);

结果图 如下:

2.png

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

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

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


今天就分享到这里!!

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
关系型数据库 MySQL 存储
【MySQL】——数据类型及字符集
【MySQL】——数据类型及字符集
167 0
【MySQL】——数据类型及字符集
|
2月前
|
机器学习/深度学习 存储 关系型数据库
MySQL数据库:常用数据类型
【2月更文挑战第7天】
32 0
|
3月前
|
存储 SQL 关系型数据库
你对MySQL的int(11)真的了解吗?
首先,需要明确的是,int(3)和int(11)都是表示整数类型,而不是定义整数的存储长度。在MySQL中,INT类型占据4个字节(32位),可以存储范围是-2^31到2^31-1(约-2.1亿到2.1亿),这个范围是固定的,不受括号中数字的影响。
139 3
你对MySQL的int(11)真的了解吗?
|
3月前
|
SQL 关系型数据库 MySQL
学习MySQL,创建表,数据类型
学习MySQL,创建表,数据类型
|
3月前
|
设计模式 NoSQL Java
常用的设计模式以及操作Redis、MySQL数据库、各种MQ、数据类型转换的方法
常用的设计模式以及操作Redis、MySQL数据库、各种MQ、数据类型转换的方法
|
1月前
|
SQL 关系型数据库 MySQL
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
101 1
|
24天前
|
存储 关系型数据库 MySQL
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
|
3月前
|
存储 SQL 关系型数据库
MySql中有哪些数据类型(数据库学习——三)
MySql中有哪些数据类型(数据库学习——三)
37 1
|
15小时前
|
关系型数据库 MySQL
MySQL基础(二:常用数据类型及MySQL创建过程实例)
MySQL基础(二:常用数据类型及MySQL创建过程实例)
MySQL基础(二:常用数据类型及MySQL创建过程实例)
|
4天前
|
存储 JSON 关系型数据库
MySQL 数据类型剖析
MySQL 数据类型剖析