mysql - INSERT...SELECT 负 double 值损坏

标签 mysql sql

我在这里遇到了一些非常意外的行为 - mysql 似乎以一种我无法解释的方式做错了数学。太长了;我正在子查询中选择一个 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 更改为浮点列可以解决问题(最后一个查询得到 -1500)

最佳答案

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

关于mysql - INSERT...SELECT 负 double 值损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43458486/

相关文章:

MySQL 1,000 条 OR 语句(好主意?)

mysql - 命令被 bash 错误解释

mysql - 读取未提交并更新

c# - 如何安全地创建一个查询,该查询将列出给定表名的列名以及可能指向 SQL Server 或 MySQL 的连接字符串?

sql - 如何将单个字段转换为SQLite日期以计算工作日?

php - 执行时打印sql查询

mysql - 为什么 MySQL 在运行查询时不使用我的索引?

sql - 低 MySQL 表缓存命中率

业务应用程序的 MySQL 数据类型?

sql - 查询时的日期未在 SQL Server 中返回正确的输出