Dav*_*vid 37
几乎所有目的都是一样的.
有一次,不同的供应商使用不同的名称(数字/十进制)几乎相同的东西.SQL-92使它们相同,只有一个小的区别,可以是特定于供应商的:
NUMERIC必须与定义的一样精确 - 因此,如果定义4个小数位,则DB必须始终存储4个小数位.
DECIMAL必须至少与定义的一样精确.这意味着数据库实际上可以存储比指定的更多的数字(由于幕后存储具有额外数字的空间).这意味着数据库可能存储1.00005而不是1.0000影响未来的计算.
在SQL Server中,Numeric被定义为以各种方式与Decimal相同 - 两者都将始终仅存储指定的小数位数.
Postgres: 没有区别
在表 8.1 的文档描述中看起来相同,但没有解释为什么单独提到它,所以根据 Tom Lane 的帖子
在 Postgres 中没有任何区别。有两种类型名称,因为 SQL 标准要求我们接受这两种名称。快速浏览一下标准,似乎唯一的区别是:
Run Code Online (Sandbox Code Playgroud)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 没有行使这种自由,所以这些类型对我们来说没有区别。
Run Code Online (Sandbox Code Playgroud)regards, tom lane
还有一个页面下方的文档清楚地说明,
类型十进制和数字是等效的。这两种类型都是 SQL 标准的一部分。
并且在别名表中 decimal [ (p, s) ]也提到了别名numeric [ (p, s) ]