MySQL5.7向BIGINT字段插入数据报超出范围错误如何解决
报错原因
你遇到的越界错误核心原因是待插入的数值超出了BIGINT类型的存储上限:
- 有符号
BIGINT取值范围:-9223372036854775808~9223372036854775807(最大值约9.2*10^18) - 无符号
BIGINT取值范围:0~18446744073709551615(最大值约1.8*10^19)
你需要插入的数值110121014322232000011约为1.1*10^20,哪怕是无符号的BIGINT也无法承载,因此触发报错。MySQL 5.7没有提供比BIGINT更大的原生整数类型,你可以根据业务场景选择以下两种调整方案。
调整方案
方案1:字段改为
DECIMAL类型(适合需要做数值计算的场景)DECIMAL是精确数值类型,设置DECIMAL(M,0)即可存储M位长度的精确整数,M最大支持65位,完全满足你的存储需求,修改示例:-- 将以下语句中的`你的表名`替换为实际业务表名,可根据自身需要调整字段属性、注释 ALTER TABLE 你的表名 MODIFY COLUMN bts DECIMAL(21,0) NOT NULL;方案2:字段改为字符串类型(适合存储业务标识类场景)
如果bts字段存的是业务单号、设备编码、标识ID这类不需要参与数值运算的内容,优先改为VARCHAR类型存储,从根源上避免数值越界问题,同时兼容后续可能出现的带字母、特殊字符的编码格式,修改示例:-- 将以下语句中的`你的表名`替换为实际业务表名,长度可根据业务需要预留冗余 ALTER TABLE 你的表名 MODIFY COLUMN bts VARCHAR(32) NOT NULL;
注意:不要使用
FLOAT、DOUBLE这类浮点类型存储大整数,浮点类型存在固有精度损失,存储超过16位的整数时会出现末尾数值错乱,无法保证数据准确性。
内容的提问来源于stack exchange,提问作者Ashish
相关产品推荐
相关产品推荐

