INSERT ...选择负双值修改

时间:2017-04-17 19:45:41

标签: mysql sql

我在这里遇到了一些非常意外的行为 - mysql似乎以一种我无法解释的方式做错了。 TLDR;我在子查询中选择double(7, 4)字段的总和,插入到具有相同数据类型的另一个表的列中,但插入步骤因某种原因而弄乱了我的数学。这就是我所拥有的:

mysql> create temporary table table_1 (amount double(7, 4) not null);
mysql> create temporary table table_2 (amount double(7, 4) not null);

mysql> insert into table_1 (amount) values (-500.00);
mysql> insert into table_1 (amount) values (-500.00);
mysql> insert into table_1 (amount) values (-500.00);

mysql> select sum(amount) from table_1;

+---------------+
| sum(amount)   |
+---------------+
|       -1500.00|
+---------------+

mysql> insert into table_2 select sum(amount) from table_1;
mysql> select * from table_2;

+-----------------+
| amount          |
+-----------------+
|       -999.9999 |
+-----------------+

这到底是怎么回事?我使用的是版本5.5.46-0 + deb8u1。

编辑:将table_2.amount更改为float列修复了问题(我上次查询得到-1500)

1 个答案:

答案 0 :(得分:0)

刚刚发现了答案heredecimal(7, 4)声明会截断给定值,包括小数点后的数字-999.9999只是列可以存储的最大值。