MySQL中DECIMAL(5,3)存300触发value out of range,是否需调整长度?
为啥DECIMAL(5,3)存300会报错?怎么解决?
这问题我之前帮同事排查过好几次,核心是你没吃透MySQL里DECIMAL(M,D)的定义逻辑:
M代表总位数(包括整数部分和小数部分的所有数字,不含小数点)D代表小数部分的固定位数
你定义的DECIMAL(5,3),意味着:
- 小数部分必须占3位
- 整数部分最多只能有
5-3=2位
所以这个字段能存的最大值是99.999,而你要存的300是3位整数,加上默认补的3位小数后变成300.000,总位数达到了6位,远超M=5的限制,自然就触发“value out of range”错误了。
解决方案:调整字段的总位数M
肯定要修改字段类型,增大M的值。比如你要存300.000,总位数至少需要3(整数)+3(小数)=6,所以可以改成DECIMAL(6,3)——这样整数部分最多能到999,完全满足存300的需求。如果以后可能存更大的数(比如1000),那就把M设为7,也就是DECIMAL(7,3)。
修改字段的SQL命令示例:
ALTER TABLE your_table_name MODIFY COLUMN your_column_name DECIMAL(6,3);
记得把your_table_name和your_column_name换成你实际的表名和字段名。
内容的提问来源于stack exchange,提问作者popop
相关产品推荐
相关产品推荐

