DECIMAL和NUMERIC之间的区别

lee*_*roy 43 sql types numeric decimal

SQL数据类型NUMERICDECIMAL?之间的区别是什么?如果数据库对待这些不同,我想知道至少如何:

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

此外,数据库驱动程序如何解释这些类型有什么不同吗?

Dav*_*vid 37

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

有一次,不同的供应商使用不同的名称(数字/十进制)几乎相同的东西.SQL-92使它们相同,只有一个小的区别,可以是特定于供应商的:

NUMERIC必须与定义的一样精确 - 因此,如果定义4个小数位,则DB必须始终存储4个小数位.

DECIMAL必须至少与定义的一样精确.这意味着数据库实际上可以存储比指定的更多的数字(由于幕后存储具有额外数​​字的空间).这意味着数据库可能存储1.00005而不是1.0000影响未来的计算.

在SQL Server中,Numeric被定义为以各种方式与Decimal相同 - 两者都将始终仅存储指定的小数位数.

  • 是十进制/数字的东西,而不是相反?http://stackoverflow.com/questions/759401/is-there-any-difference-between-decimal-and-numeric-in-ms-sql/759606#759606 (2认同)

gbn*_*gbn 8

它们是同义词,完全没有区别.

至少 ANSI SQL标准中的SQL Server上.这个SO答案显示了ANSI的一些差异,但我怀疑在实现中它们是相同的


Vao*_*sun 5

Postgres: 没有区别

在表 8.1 的文档描述中看起来相同,但没有解释为什么单独提到它,所以根据 Tom Lane 的帖子

在 Postgres 中没有任何区别。有两种类型名称,因为 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>.
Run Code Online (Sandbox Code Playgroud)

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

      regards, tom lane
Run Code Online (Sandbox Code Playgroud)

还有一个页面下方的文档清楚地说明,

类型十进制和数字是等效的。这两种类型都是 SQL 标准的一部分。

并且在别名表中 decimal [ (p, s) ]也提到了别名numeric [ (p, s) ]