即时通讯使用av简单数据库,我有3列A(bigINT 20),B(bigInt 20)和c(DECIMAL(5,4)),当我触发以下查询时,我得到下面提到的结果:
REPLACE INTO `my_table` SET `A` = 8,`B` = 44,`C` = 14;
我在mysql中得到这些值A = 8,b = 44,c为9.9999! ?
关于为什么会发生这种情况的任何想法,我该怎么做才能解决这个问题?
答案 0 :(得分:5)
DECIMAL(5,4)
表示该数字在小数点后最多为5
个数字,4
。因此,14
只是溢出,因为它需要DECIMAL(6,4)
。
必须清除14
溢出,因为作为常量精度点十进制,它在内部14.0000
(所以六位数超过五)。
因此,如果您尝试将14.0000
(六位数)放入DECIMAL(5,4)
(最多五位数) - > MySQL选择最接近您请求的值的值。因此14.0000
被“舍入”到9.9999
。
要使14
适合您的列,您可以将其扩展为DECIMAL(6,4)
(一般允许更多位数)或更改为DECIMAL(5,3)
(这将允许小数点前一位数) ,但当然会失去一些精确度。)