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

Nis*_*ani 1 mysql replace

即时通讯使用简单的数据库,我有3列A(bigINT 20),B(bigInt 20)和c(DECIMAL(5,4)),当我触发以下查询时,我得到下面提到的结果:

REPLACE INTO `my_table` SET `A` = 8,`B` = 44,`C` = 14;
Run Code Online (Sandbox Code Playgroud)

我在mysql中得到这些值A = 8,b = 44,c为9.9999!?

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

Kub*_*tek 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)(在小数点之前允许多一位数,但当然会失去一些精度).