在SQL Server中,您可以使用FLOAT
或REAL
存储浮点值,其存储格式由IEEE 754标准定义.对于定点值,我们可以使用DECIMAL
类型(具有同义词NUMERIC
).但是我不太确定SQL Server如何在DECIMAL
内部存储值.例如,如果我定义一个表并插入如下行:
IF OBJECT_ID('dbo.test_number_types') IS NOT NULL DROP TABLE dbo.test_number_types;
CREATE TABLE dbo.test_number_types
(
id INT IDENTITY(1, 1),
c1 NUMERIC(5, 4)
)
GO
INSERT INTO dbo.test_number_types(c1)VALUES(5.7456);
Run Code Online (Sandbox Code Playgroud)
当我使用DBCC PAGE
命令检查SQL Server如何存储数字5.7456时,我得到了这个:
01 70 E0 00 00
Run Code Online (Sandbox Code Playgroud)
这个十六进制字符串应该使用小端.我无法弄清楚SQL Server如何将5.7456转换为01 70 E0 00 00
如何以及它如何确定积分部分的字节数以及小数部分的字节数.有人可以帮忙吗?
顺便说一下,我查过了"SQL Server 2012 Internals"这本书.有一章专门介绍数据类型.但似乎DECIMAL
书中没有提到类型存储.