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

当MySQL的int不够用了

关于int的长度

  • 很多时候看到int(8)这样的定义,其实这是工具导出的不专业。

  • int是范围,不是长度。

  • 在开发有了共识(知道这个长度不算数,要看范围)以后,上来就是所有的类型都是bigint。

int的范围

  • int的取值范围是
  • TINYINT:占用1个字节(8位),取值范围是-128到127(有符号),或者0到255(无符号)。
  • SMALLINT:占用2个字节(16位),取值范围是-32,768到32,767(有符号),或者0到65,535(无符号)。
  • MEDIUMINT:占用3个字节(24位),取值范围是-8,388,608到8,388,607(有符号),或者0到16,777,215(无符号)。
  • INT 或 INTEGER:占用4个字节(32位),取值范围是-2,147,483,648到2,147,483,647(有符号),或者0到4,294,967,295(无符号)。
  • BIGINT:占用8个字节(64位),取值范围是-9,223,372,036,854,775,808到9,223,372,036,854,775,807(有符号),或者0到18,446,744,073,709,551,615(无符号)。
  • 总之占位字节越多,性能就越不好。所以都是bigint不太合适

我个人建议

  • MySQL的表,如果要自增ID当主键的,那么就是用int就行。可以放21亿条数据。现如今99.99%的系统中的数据表没这么多数据。如果想再多一点用无符号的,那么就能扩大到42亿条数据。现如今99.9999%的系统中的数据表没这么多数据。
  • 问题来了,如果一开始没设置无符号,到了21亿的范围会如何?
  • 答案是写不进去了。
  • 追问,这个时候改还来得及吗?
  • 答案是,可以。

实操测试

  • 在MySQL中当列有数据库的时候改类型是可以的。(不是所有都这样,Oracle就不允许)
  • image.png

  • 在b列有数据的时候改类型。成功。
  • 在这个基础上给id列写入最大值以及模拟越界。
  • image.png

  • 可以看出,在2147483647的时候还可以写入。但是到了2147483648的时候不行了。
  • image.png

  • 这时候把int列改成无符号型,又可以写入了。理论写入42亿条。
http://www.dtcms.com/a/339313.html

相关文章:

  • GTSAM中实现多机器人位姿图优化(multi-robot pose graph optimization)示例
  • 权限管理系统
  • 动手学深度学习(pytorch版):第四章节—多层感知机(7、8)数值稳定性和模型初始化
  • 《算法导论》第 31 章 - 数论算法
  • 个人介绍CSDNmjhcsp
  • Kubernetes集群安装部署--flannel
  • Vue 2 项目中快速集成 Jest 单元测试(超详细教程)
  • 云计算学习100天-第23天
  • github 上传代码步骤
  • 【Python】新手入门:python模块是什么?python模块有什么作用?什么是python包?
  • Day13_【DataFrame数据组合merge连接】【案例】
  • 嵌入式开发学习———Linux环境下网络编程学习(三)
  • 第5.5节:awk算术运算
  • RabbitMQ:交换机(Exchange)
  • LeetCode-17day:贪心算法
  • 95、23种设计模式之建造者模式(4/23)
  • 大模型 + 垂直场景:搜索/推荐/营销/客服领域开发新范式与技术实践
  • 抓取手机游戏相关数据
  • 细化的 Spring Boot 和 Spring Framework 版本对应关系
  • c++计算器(简陋版)
  • 【全面推导】策略梯度算法:公式、偏差方差与进化
  • 差分(附带例题题解)
  • 深度学习 --- 基于ResNet50的野外可食用鲜花分类项目代码
  • 基于单片机身体健康监测/身体参数测量/心率血氧血压
  • 接口性能测试工具 - JMeter
  • . keepalived+haproxy
  • Ubuntu22.04安装docker最新教程,包含安装自动脚本
  • 【QT入门到晋级】进程间通信(IPC)-socket(包含详细分析及性能优化)
  • Day08 Go语言学习
  • C#/.NET/.NET Core技术前沿周刊 | 第 50 期(2025年8.11-8.17)