【问题标题】:Decimal in MysqlMysql中的十进制
【发布时间】:2014-05-08 21:42:15
【问题描述】:

我有一张有很多列的表。它们之间有 AB 和 AL 都是 decimal(14,3) 。 现在我必须像这样创建一个新表:

create table new as
select AB, AL, (AB/AL)*100 AS M from my_table;

Mysql 给我一些警告,例如:“1265 Data truncated for column M at row 2”。

是否警告我新数字将被四舍五入?安全吗?

现在新列 M 是小数 (24,7),但我只需要四舍五入的 DECIMAL(14, 3)。 我必须做一个 alter table 还是有办法在 create 语句中做到这一点?

我有一个巨大的数据库,其中包含许多这样的列,所以我需要保持表大小最小

【问题讨论】:

  • "我有一张有很多列的表。"这有时表明设计不佳(即非标准化)。

标签: mysql decimal


【解决方案1】:

只是做数学 一个例子 1.0 / 0.3 对于小数(14,3)都是可以的,但是当它们与你的公式一起应用时,它们的结果会产生 333.333333....

可能会出现舍入错误,但如果您只需要 14,3,则只会使用 14,3,因为将 24,7 转换为 14,3 与仅制作 14,3 相同。

p>

您的数据将被截断,但不足以影响您,请先试用以确保安全

【讨论】:

  • 如果我有 AB,AL 作为 BIGINT mysql 生成一个小数(26,4)并警告我截断。我如何决定在创建语句中是要小数(20,6)还是小数(14,3)
  • 你最终会以 14,3 结尾吗?如果是这样的话。这是你的选择。我不知道您的数据是做什么用的,也不知道它需要多准确。两种方式都会有一些损失20,6 与更多存储相比,损失更少
  • 对不起,我没有很好地解释我的问题。 Mysql 如果我有 AB,AL 作为 BIGINT mysql 生成一个小数(26,4)。假设我想要一个小数(20,6)并且我做了一个更改表:我将在 4 位数字后全为零,因为 Mysql 只是截断了这个数字。如何在创建语句中写 (AB/AL)*100 必须是小数 (20,6)?
  • 与CAST((AB/AL)*100 AS DECIMAL(20,6))
猜你喜欢
  • 2014-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-24
  • 2016-08-12
  • 2019-02-18
  • 2015-06-07
  • 1970-01-01
相关资源
最近更新 更多