相关字段数据及其数据存储信息和存储字节说明
对于bit、tinyint、smallint、int、bigint这类整型数据,应该是比较容易理解的,例如十进制数1234567890,换算成16进制为499602D2,在SQL Server中,数字的存储是需要倒置的,因此实际存储应为D2029649。
对于decimal(p,s)、numeric(p,s)的值分别为987654.3210、9876.543210,但二进制却均为01EA16B04C02000000,把9876543210换算成16进制为24CB016EA进行翻转,然后再加上符号位,即为01EA16B04C02000000;但很奇怪两者没有存储小数位置,难道需要临时从数据字典中获取?
smallmoney用四个字节表示,存储的是与基数-214748.3648想减得到的数字再乘以10000后的二进制形式。Money用八个字节表示,存储的是与基数-922,337,203,685,477.5808想减得到的数字再乘以10000后的二进制形式。
float、real暂未知
datetime类型的第一个 4 字节存储的是 base date(即 1900 年 1 月 1 日)之前或之后的天数;另外一个 4 字节存储以午夜后毫秒数所代表的每天的时间。
smalldatetime 数据类型存储日期和每天的时间,但精确度低于 datetime。第一个 2 字节存储 1900 年 1 月 1 日后的天数;另外一个 2 字节存储午夜后的分钟数。
date类型的3个字节存储的是base date(即 1900 年 1 月 1 日)之后的天数。
time类型的5个字节存储的是以午夜后100纳秒所代表的每天的时间。
datetime2类型的前3字节存储的是 base date(即 1900 年 1 月 1 日)之前或之后的天数;另外一个 5 字节存储以午夜后100纳秒数所代表的每天的时间。
关于char和varchar,存储的是该字符的ASCI码;双字节字符存储2位。
对于nchar和nvarchar,存储的UNICODE UCS-2 字符集的双字节。