当我在DECIMAL(4,3)
列中插入一些数据时遇到了一种奇怪的情况,特别是我试图插入的值是:80.018
但我得到:{ {1}}执行此代码后:
9.999
为什么会出现这种情况?
答案 0 :(得分:8)
decimal(4,3)
表示总共有4位数,其中3位是小数点。
如果值仅限于99.999
,那么decimal(5,3)
就可以了。
答案 1 :(得分:3)
小数(4,3)表示总共有4位数,小数点后3位。 80.018要求(5,3)
答案 2 :(得分:1)
对于超出范围和溢出条件,MySQL存储列中允许的最高值(或允许的最低值,如果我们变为负值)除非启用严格模式,否则MySQL将抛出错误。
此行为记录在MySQL参考手册中:https://dev.mysql.com/doc/refman/5.7/en/out-of-range-and-overflow.html
当MySQL将值存储在超出列数据类型允许范围的数值列中时,结果取决于当时生效的SQL模式:
如果启用了严格的SQL模式,MySQL会根据SQL标准拒绝带有错误的超出范围的值,并且插入失败。
如果未启用限制模式,MySQL会将值剪辑到列数据类型范围的相应端点,并存储结果值。