DECIMAL和NUMERIC的区别

SQL数据typesNUMERIC和DECIMAL有什么区别? 如果数据库对待这些不同,我想知道至less如何:

  • SQL Server
  • 神谕
  • DB / 2
  • MySQL的
  • PostgreSQL的

此外,数据库驱动程序是如何解释这些types的?

几乎所有的目的都是一样的。

有一次,不同的供应商使用不同的名称(数字/十进制)几乎相同的东西。 SQL-92使他们相同与一个小的差异,可以是供应商特定的:

NUMERIC必须与其定义的一样精确 – 因此,如果您定义了4个小数位,则DB必须始终存储4个小数位。

DECIMAL必须至less与定义一样精确。 这意味着数据库实际上可以存储比指定更多的数字(由于后台存储空间可用于额外的数字)。 这意味着数据库可能存储1.00005而不是1.0000 ,影响将来的计算。

在SQL Server中,数字在每种方式中都被定义为与十进制相同 – 两者将始终只存储指定的小数位数。

他们是同义词,没有任何区别。

至less ANSI SQL标准的SQL Server上。 这个答案显示了ANSI的一些差异,但我怀疑在实施中,他们是一样的

Postgres: 没有区别

在表8.1中的文档描述看起来是一样的,但是没有解释为什么它是分开提到的,所以根据Tom Lane的post

在Postgres中没有任何区别。 有两个types名称,因为SQL标准要求我们接受这两个名称。 在标准看来,唯一的区别是:

  17)NUMERIC specifies the data type exact numeric, with the decimal precision and scale specified by the <precision> and <scale>. 18)DECIMAL specifies the data type exact numeric, with the decimal scale specified by the <scale> and the implementation-defined decimal precision equal to or greater than the value of the specified <precision>. 

即对于DECIMAL,允许实现允许比小数点左边要求更多的数字。 Postgres没有行使这种自由,所以这些types对我们来说没有任何区别。

  regards, tom lane 

还有一个页面下面的文档清楚地说明了这一点

小数和数字的types是等价的。 这两种types都是SQL标准的一部分。

并在别名表 decimal [ (p, s) ]被提及作为numeric [ (p, s) ]别名