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) ]
别名