Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
replace查询中的异常mysql行为_Mysql_Replace - Fatal编程技术网

replace查询中的异常mysql行为

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

我使用一个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,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个数字。