mysql decimal numeric 区别_sql-DECIMAL和NUMERIC之间的区别

它们实际上是等效的,但是它们是独立的类型,在技术上不是同义词,例如ROWVERSION和TIMESTAMP-尽管它们可能在文档中一次被称为同义词。 这与同义词的含义稍有不同(例如,除了名称上,它们是无法区分的,没有一个是另一个的别名)。 具有讽刺意味,对不对?

我从MSDN中的措辞解释的实际上是:这些类型是相同的,只是名称不同。

除了type_id值之外,这里的所有内容都是相同的:

SELECT * FROM sys.types WHERE name IN (N'numeric', N'decimal');

我完全不知道两者之间的任何行为差异,回到SQL Server 6.5,始终将它们视为100%可互换的。

for DECIMAL(18,2) and NUMERIC(18,2)? Assigning one to the other is technically a "conversion"?

仅当您明确地这样做时。 您可以通过创建一个表,然后检查查询计划中执行显式或隐式转换的查询来轻松证明这一点。 这是一个简单的表:

CREATE TABLE [dbo].[NumDec]

(

[num] [numeric](18, 0) NULL,

[dec] [decimal](18, 0) NULL

);

现在运行以下查询并捕获计划:

DECLARE @num NUMERIC(18,0);

DECLARE @dec DECIMAL(18,0);

SELECT

CONVERT(DECIMAL(18,0), [num]), -- conversion

CONVERT(NUMERIC(18,0), [dec]) -- conversion

FROM dbo.NumDec

UNION ALL SELECT [num],[dec]

FROM dbo.NumDec WHERE [num] = @dec -- no conversion

UNION ALL SELECT [num],[dec]

FROM dbo.NumDec WHERE [dec] = @num; -- no conversion

我们在要求的地方进行了明确的转化,但在我们可能期望的地方没有进行明确的转化。 似乎优化器也将它们视为可互换的。

就我个人而言,我更喜欢使用DECIMAL一词,因为它更准确和更具描述性。 BIT也是“数字”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值