你对MySQL的int(11)真的了解吗?

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 首先,需要明确的是,int(3)和int(11)都是表示整数类型,而不是定义整数的存储长度。在MySQL中,INT类型占据4个字节(32位),可以存储范围是-2^31到2^31-1(约-2.1亿到2.1亿),这个范围是固定的,不受括号中数字的影响。

最近在网上看到一篇关于int(3)和int(11)区别的帖子,我第一反应这不就是它们之间主要涉及存储整型数据时所需的位数,即3位和11位的差异。然而,经过详细阅读文章并进行进一步的资料查询和测试后,我才发现我一直以来对于int(3)的理解存在误差。今天,我打算与家人分享这一新的认识。

mysql-int.jpg

MYSQL int 数据存储范围

首先,需要明确的是,int(3)和int(11)都是表示整数类型,而不是定义整数的存储长度。在MySQL中,INT类型占据4个字节(32位),可以存储范围是-2^31到2^31-1(约-2.1亿到2.1亿),这个范围是固定的,不受括号中数字的影响。

显示宽度

int(3)和int(11) 区别在于显示宽度的影响。当我们定义一个字段为int(3)时,这个数字表示的是在使用ZEROFILL填充字符时的显示宽度,而不是实际存储的整数位数。使用ZEROFILL会在数字不足指定宽度时,在前面用零进行填充。

我们可以在mysql(5.7)中创建数据查看下具体的效果:

创建表:

CREATE TABLE `int_test1` (
  `int_3` int(3) ,
  `int_11` int(11) ,
  `int_zf_3` int(3)  ZEROFILL ,
  `int_zf_11` int(11)  ZEROFILL 
);

添加数据:

INSERT INTO int_test1(int_3,int_11,int_zf_3,int_zf_11) VALUES 
(1,1,1,1),
(2365,2365,2365,2365);

查看数据:

_20240127224156.jpg

可以看到,int() 括号中的数字是在位数不足时如果使用ZEROFILL的话会在前面用零进行填充,补齐到括号中数字的位数。

注意事项

  • 使用ZEROFILL填充字段 时插入负数报错

因为ZEROFILL属性只适用于非负整数。所以当我们插入负数时会报错。

_20240127224711.jpg

我们打开表的DDl,就可以看到,我们设置ZEROFILL的时候他会自动设置为unsigned(无符号)
_20240127224545.jpg

  • ZEROFILL只在整数类型上有效,对于其他数据类型(如浮点数)不适用。

  • 在mysql8.0 中,只有设置了ZEROFILL,才能看到int(),否则都是int

实际应用

我们在实际生产环境使用查询的时候通常要把数据库的int数据转化为java对象的Integer,所以ZEROFILL在实际生产中使用的很少,其次我们需要给数据补齐位数的时候通常是在程序中做处理,不会依赖数据库,这样我们的业务才能更灵活。

总结

在数据库设计中,INT(3)和INT(11)的区别主要在于它们控制输出时的显示宽度。实际的存储大小是相同的,都占用4个字节。而括号中的数字在非ZEROFILL的情况下,只是指定了输出时的最小宽度,不足时会用空格填充。在ZEROFILL的情况下,还会影响零填充的总宽度。因此,在选择使用INT(3)还是INT(11)时,主要考虑的是对数据的显示控制需求。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
8月前
|
存储 SQL 关系型数据库
|
10月前
|
存储 关系型数据库 MySQL
MySQL 中 int (10) 和 char (10) 和 varchar (10) 的区别
MySQL 中 int (10) 和 char (10) 和 varchar (10) 的区别
109 0
|
12月前
|
存储 关系型数据库 MySQL
Mysql中int和varchar类型
Mysql中int和varchar类型
158 0
|
存储 关系型数据库 MySQL
聊聊MySQL中的int(1)
聊聊MySQL中的int(1)
257 0
|
存储 关系型数据库 MySQL
Mysql数据库int(11)和int(10)有啥区别?
Mysql数据库int(11)和int(10)有啥区别?
Mysql数据库int(11)和int(10)有啥区别?
|
存储 关系型数据库 MySQL
MySQL中整各种int类型的范围和存储大小
MySQL中整各种int类型的范围和存储大小
186 0
|
存储 关系型数据库 MySQL
软件测试mysql面试题:mysql中int(10)和char(10)以及varchar(10)的区别?
软件测试mysql面试题:mysql中int(10)和char(10)以及varchar(10)的区别?
147 0
|
关系型数据库 MySQL
mysql将varchar转换为int
mysql将varchar转换为int
1065 0
|
存储 关系型数据库 MySQL
Mysql 关于 int(1) 和 int(11) , 我必须要说一下了。
Mysql 关于 int(1) 和 int(11) , 我必须要说一下了。
466 0
Mysql 关于 int(1) 和 int(11) , 我必须要说一下了。
|
7天前
|
SQL 存储 关系型数据库
MySQL Cluster集群安装及使用
MySQL Cluster集群安装及使用