当前位置: 首页 > 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.dtcms.com/a/355489.html

相关文章:

  • (笔记)输入法框架协作机制深度分析
  • 内网穿透工具【frp】的核心功能底层处理逻辑解析
  • WINTRUST!_ExplodeMessage的作用是赋值psIndirectData
  • Windows 11 中 PowerShell 与 CMD 的深度对比:从定位到实战
  • 集成 A2A Protocol - BeeAI 框架的智能代理通信解决方案
  • 机器人芯片:驱动智能机器的核心技术引擎
  • 有限与无限的游戏 之感
  • 稳石氢能受邀出席2025势银绿氢产业大会,荣获“2025绿氢技术突破奖”!
  • SAP SD模块用户经常遇到的痛点以及解决方案
  • Circuitjs 测试点的使用
  • HTML+CSS、JavaScript、Vue、Ajax
  • Docker 40个自动化管理脚本-2 (40/40)
  • 【动态规划】子数组、子串问题
  • 国产芯力量!贴片式SD卡搭载北京君正Rk瑞芯微,打造嵌入式存储低延迟+高可靠黄金组合​
  • MongoDB 文档模型设计:JSON 结构的灵活性与陷阱
  • Mac训练大模型:MLX-LM框架LoRA训练Qwen3并集成SwanLab进行可视化
  • 基于mac的智能语音处理与应用开发-环境部署
  • 【LangGraph】核心概念速通:State/Node/Edge、通道、事件与流式输出
  • Java8-21的核心特性以及用法
  • FPGA位宽调整模块
  • 跨语言 UDP 聊天程序实现:Go 客户端与 Python 服务端[超简单 入门级聊天程序 包含完整源码]
  • 线段树 (Segment Tree)
  • 理解AI智能体:智能体记忆
  • day04-kubernetes(k8s)
  • 微动开关-电竞鼠标核心!5000万次寿命微动开关评测
  • windows PowerToys之无界鼠标:一套键鼠控制多台设备
  • 【详细教程】如何将SQLBot的MCP服务集成到n8n
  • Linux_详解线程池
  • 【mysql】SQL HAVING子句详解:分组过滤的正确姿势
  • SystemVerilog学习【六】功能覆盖率详解