薛晓刚-
当MySQL的int不够用了
关注作者
腾讯云
开发者社区
文档
建议反馈
控制台
登录/注册
首页
学习
活动
专区
圈层
工具
MCP广场
文章/答案/技术大牛
搜索
搜索
关闭
发布
薛晓刚-
社区首页
>
专栏
>
当MySQL的int不够用了
当MySQL的int不够用了
薛晓刚-
关注
发布于 2026-06-25 10:55:37
发布于 2026-06-25 10:55:37
108
0
举报
关于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亿条。
本文参与
腾讯云自媒体同步曝光计划
,分享自微信公众号。
原始发表:2025-08-19,如有侵权请联系
cloudcommunity@tencent.com
删除
int
mysql
工具
数据
系统
本文分享自
四海内皆兄弟
微信公众号,
前往查看
如有侵权,请联系
cloudcommunity@tencent.com
删除。
本文参与
腾讯云自媒体同步曝光计划
,欢迎热爱写作的你一起参与!
int
mysql
工具
数据
系统
评论
登录
后参与评论
0 条评论
热度
最新
推荐阅读
目录
关于int的长度
int的范围
我个人建议
实操测试
领券
问题归档
专栏文章
快讯文章归档
关键词归档
开发者手册归档
开发者手册 Section 归档
0
0
0
推荐