当前位置: 首页 > news >正文

MySQL 中 tinyint(1)、int(11)、bigint(20) 的数字到底是什么意思?

在设计数据库表时,你可能经常看到这样的字段定义:

id int(11) not null auto_increment
is_active tinyint(1) not null default 1
order_id bigint(20) not null

很多人会以为括号里的数字决定了 存储范围大小,比如 int(11) 就能存 11 位数字,其实这是一个误解。今天我们来彻底讲清楚。


一、整数类型的本质存储

在 MySQL 中,整数类型的存储空间是固定的,不会因为你写了括号里的数字而改变。

类型存储空间有符号范围(默认)无符号范围(unsigned)
tinyint1字节-128 ~ 1270 ~ 255
smallint2字节-32768 ~ 327670 ~ 65535
int4字节-2147483648 ~ 21474836470 ~ 4294967295
bigint8字节-2^63 ~ 2^63 - 10 ~ 2^64 - 1

👉 所以:

  • int 永远是 4 字节,和 int(11)int(3) 没区别
  • bigint 永远是 8 字节,和 bigint(20) 没区别
  • tinyint 永远是 1 字节,和 tinyint(1)tinyint(2) 都一样

二、括号里的数字 (M) 到底是什么?

这个 (M) 在 MySQL 5.x 里是 显示宽度,意思是 显示时最少显示 M 位数字,但它不会影响存储范围。

例如:

create table test (a int(5) zerofill
);insert into test values (123);
select a from test;

结果会显示:

00123

因为设置了 zerofill,会自动在前面补零。
但如果没有 zerofill,就是正常显示 123


三、MySQL 8 之后的变化

MySQL 8.0.17 开始,整数类型的 (M) 已经被废弃了。
现在你写 int(11)int 完全一样,括号里的数字被忽略。

官方文档说明:MySQL 8.0 Deprecated Features


四、常见误区

  1. 以为 int(11) 可以存 11 位数字

    • 实际上 int 最大值就是 2147483647(10 位),和 (11) 没关系
  2. 以为 bigint(20) 就能存 20 位数字

    • 实际上 bigint 最大值是 2^63-1,大约 19 位数字,括号里的 20 纯属无效
  3. 以为 tinyint(1) 就是布尔值

    • tinyint(1) 本质还是 tinyint,只是 ORM 框架(比如 MySQL JDBC、Laravel)会把它当作布尔值来映射

五、正确写法建议

✅ 在 MySQL 8 及以上

  • 直接写 intbiginttinyint 就够了,不要写 (11)(20)
  • 如果需要布尔值,直接用 tinyint(1)boolean(底层还是 tinyint(1))

✅ 在 MySQL 5.x(老系统还没升级):

  • int(11) 里的 (11) 只是显示宽度,不影响存储范围
  • 如果配合 zerofill 才有意义,否则完全可以省略

六、总结

  • tinyintintbigint 的存储范围固定,和括号里的数字无关
  • (M) 在 MySQL 5.x 是显示宽度,用处有限,在 8.0 已经废弃
  • int(11) 其实和 int 一样,别再误解了
  • 如果需要布尔值,用 tinyint(1),只是约定俗成

👉 最佳实践:新项目直接写 int / bigint / tinyint,不要加 (M)


http://www.xdnf.cn/news/1383589.html

相关文章:

  • Vibe Coding 概念提出者 AndrejKarpathy 谈强化学习。
  • 在jdk8的spring-boot-2.7.x项目中集成logback-1.3.x
  • 通过代码认识 CNN:用 PyTorch 实现卷积神经网络识别手写数字
  • Maven 项目单元测试实战指南:从环境搭建到问题排查全解析
  • 使用astah制作专业状态图及C/C++实现解析
  • Docker 详解+示例
  • 进程组 会话 作业控制 守护进程
  • 【Canvas与盾牌】“靡不有初,鲜克有终”黄竖条盾牌
  • Redis 哨兵(Sentinel)全面解析
  • 海康相机开发---设备登录
  • Subdev与Media子系统的数据结构
  • redis单哨兵模式
  • 把 AI 塞进「智能水杯」——基于声学指纹的零样本水质检测杯
  • open webui源码分析11-四个特征之记忆
  • GD32VW553-IOT OLED移植
  • Intern-S1-mini模型结构
  • Python训练营打卡 DAY 50 预训练模型+CBAM模块
  • DQN(深度Q网络):深度强化学习的里程碑式突破
  • 【LeetCode每日一题】160.相交链表 206. 反转链表
  • 在Xcode中查看设备日志的完整指南
  • 消息队列核心问题解决方案:从丢失到重复消费的全方位保障
  • Windows 11 中 PowerShell 与 CMD 的深度对比:从定位到实战
  • Python DELL Logo
  • LCEDA电气规则
  • 整体设计 修订 之1 三“先”之“基” 与范畴重构:康德先验哲学的批判性程序化实现
  • MapStruct用法和实践
  • Vibe Coding到底是什么:什么是 Vibe Coding?AI编程?
  • 深度学习----卷积神经网络实现数字识别
  • 从0开始学习Java+AI知识点总结-27.web实战(Maven高级)
  • 漫谈《数字图像处理》之区域生长和区域分离聚合