replace查询中的异常mysql行为
我使用一个v简单数据库,我有3列a(bigINT 20)、B(bigINT 20)和c(DECIMAL(5,4)),当我启动以下查询时,我得到以下提到的结果:replace查询中的异常mysql行为,mysql,replace,Mysql,Replace,我使用一个v简单数据库,我有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 关于为什么会发生这种情况以及我能做些什么来解决这个问题,有什么想法吗?十进制(5,4)表示数字在小数点后最多有5位数,4位数。所以14只是溢出,因为它需要十进制(6
REPLACE INTO `my_table` SET `A` = 8,`B` = 44,`C` = 14;
我在mysql中得到这些值,A=8,b=44,c为9.9999
关于为什么会发生这种情况以及我能做些什么来解决这个问题,有什么想法吗?十进制(5,4)
表示数字在小数点后最多有5位数,4位数。所以14
只是溢出,因为它需要十进制(6,4)
必须清除14
是溢出的,因为作为常量精度小数点,它在内部是14.0000
(因此五位数上有六位数)
因此,如果您尝试将14.0000
(六位数)放入十进制(5,4)
(最多五位数)->MySQL会选择最接近您请求的值。因此,14.0000
将“四舍五入”为9.9999
要使列中的14
,您可以将其扩展为DECIMAL(6,4)
(通常允许更多的数字),或更改为DECIMAL(5,3)
(这将允许在小数点之前再增加一个数字,但当然会失去一些精度)。十进制(5,4)
表示数字最多有5个数字,4个
小数点后。所以14
只是溢出,因为它需要十进制(6,4)
必须清除14
是溢出的,因为作为常量精度小数点,它在内部是14.0000
(因此五位数上有六位数)
因此,如果您尝试将14.0000
(六位数)放入十进制(5,4)
(最多五位数)->MySQL会选择最接近您请求的值。因此,14.0000
将“四舍五入”为9.9999
要使列中的14
适合,您可以将其扩展为十进制(6,4)
(通常允许更多的数字),或更改为十进制(5,3)
(这将允许在小数点前多出一个数字,但当然会失去一些精度).您的表只有一行吗?您的表只有一行吗?为什么5是溢出,14有两位,不是吗?不。小数点后有4位数字,14实际上是14.0000。六位数。顺便说一句。我只是喜欢MySQL的这种缺陷。。。我很难想象一个场景,当一个开发人员希望数据库服务器在十进制列中将14取整为9.9999,而不是抛出“您的设计估算是错误的”错误…更新的答案。希望现在清楚了。不,5.4意味着你可以有5个数字表(小数点前后都计算)。我在第二条评论中写道14
对您来说是14
,但只要您希望将其放入DECIMAL(5,4)
列,它就会在内部转换为DECIMAL(?,4)
类型,因此在内部表示为14.0000
,它有6个数字。为什么5是一个溢出,14有2个数字,不是?否。小数点后有4个数字,14实际上是14.0000。六位数。顺便说一句。我只是喜欢MySQL的这种缺陷。。。我很难想象一个场景,当一个开发人员希望数据库服务器在十进制列中将14取整为9.9999,而不是抛出“您的设计估算是错误的”错误…更新的答案。希望现在清楚了。不,5.4意味着你可以有5个数字表(小数点前后都计算)。我在第二条评论中写道14
对于您来说是14
,但只要您希望将其放入DECIMAL(5,4)
列中,它就会在内部转换为DECIMAL(?,4)
类型,因此在内部表示为14.0000
,它有6个数字。