MySQL报错!Data truncation: Out of range value for colum

本文探讨了在数据库字段设置中,无符号数与有符号数的存储范围差异,特别是在int类型中,如何避免因数值溢出导致的数据存储问题。通过实例分析,解释了为何在存储特定类型数据(如userId)时,需要考虑数据的正负范围及最大值,最终选择合适的字段类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

表面上看是字段设置的不够长,其实这里面隐藏一个小知识,关于无符号数和有符号数
今天项目表中有一个userId int(11)和mobilephone varchar(11)字段 因为某种业务需求 这两个字段设置的内容一样;
varchar类型存手机号 肯定没问题 手机号就是11位;但是存userId的时候 就不行了,我们知道:

对于 int类型来说 存储有符号数 和 无符号数的 范围是不一样的:
有符号数:[-2^31, 2^31 - 1]
无符号数:[0, 2^32 - 1]
int(11)默认是存储的有符号的数 int(10)默认存储无符号数 也就是 unsigned int
int(11)和int(10)指标是存储之后显示的位数 并不是标识可以存储的位数 有最大值的限制 跟这个括号里面的无关

这次我存储的数值超过了int 的范围 所以改成bigint
整型范围图
点击详细了解范围
记录一下 开发当中遇到的小bug 共勉

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值