替换查询时出现异常的mysql行为

时间:2012-08-20 12:32:55

标签: mysql replace

即时通讯使用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! ?

关于为什么会发生这种情况的任何想法,我该怎么做才能解决这个问题?

1 个答案:

答案 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)(这将允许小数点前一位数) ,但当然会失去一些精确度。)