设为首页 收藏本站
查看: 770|回复: 0

[经验分享] SQL Server 2008连载之数据类型

[复制链接]

尚未签到

发表于 2016-11-2 04:25:56 | 显示全部楼层 |阅读模式
精确数字类型
DSC0000.jpg

decimal[ (p[ , s] )]和numeric[ (p[ ,s] )]也称为带固定精度和小数位数的数值数据类型。

固定精度和小数位数。使用最大精度时,有效值从- 10^38 +1到10^38 - 1。
p(精度)最多可以存储的十进制数字的总位数,包括小数点左边和右边的位数。该精度必须是从1到最大精度38之间的值。默认精度为18。
s(小数位数)小数点右边可以存储的十进制数字的最大位数。小数位数必须是从0到p之间的值。仅在指定精度后才可以指定小数位数。默认的小数位数为0;因此,0 <= s <= p。最大存储大小基于精度而变化。
DSC0001.jpg


近似数字
DSC0002.jpg

float [ ( n ) ]
其中n为用于存储float数值尾数的位数(以科学记数法表示),因此可以确定精度和存储大小。如果指定了n,则它必须是介于1和53之间的某个值。n的默认值为53。
DSC0003.jpg


日期和时间
DSC0004.jpg

字符串
DSC0005.jpg

其他数据类型
DSC0006.jpg


下面我们创建一张囊括几乎所有数据类型的表,然后根据
CREATETABLEtestDataType

(

"bit"bit,

"tinyint"tinyint,

"smallint"smallint,

"int"int,

"bigint"bigint,

"decimal(p,s)"decimal(10,4),

"numeric(p,s)"numeric(10,6),

"smallmoney"smallmoney,

"money"money,

"float"float,

"real"real,

"datetime"datetime,

"date"date,

"time"time,

"smalldatetime"smalldatetime,

"datetime2"datetime2,

"datetimeoffset"datetimeoffset,

"char(n)"char(4),

"varchar(n)"varchar(4),

"nchar(n)"nchar(4),

"nvarchar(n)"nvarchar(4),

"binary(n)"binary(6),

"varbinary(n)"varbinary(6),

"varchar(max)"varchar(max),

"nvarchar(max)"nvarchar(max),

"varbinary(max)"varbinary(max),

"Text"Text,

"Ntext"Ntext,

"Image"Image

)

--向各个字段插入相应的数据值

INSERTINTOtestDataType(

"bit","tinyint","smallint","int","bigint",

"decimal(p,s)","numeric(p,s)",

"smallmoney","money",

"float","real",

"datetime","date","time",

"smalldatetime","datetime2","datetimeoffset",

"char(n)","varchar(n)","nchar(n)","nvarchar(n)",

"binary(n)","varbinary(n)",

"varchar(max)","nvarchar(max)","varbinary(max)",

"Text","Ntext","Image"

)

SELECT

1,123,12345,1234567890,1234567890123456789,

987654.3210,9876.543210,

123456.7890,123456789012345.6789,

1234567890.1234567890,1234567890.1234567890,

'2010-01-0123:59:59.123','2010-01-01','23:59:59. 1234567',

'2010-01-0123:59:59','2010-01-0123:59:59.1234567','2010-01-01 23:59:59.1234567 +12:00',

'abcd','abcd','王保强','王保强',

CONVERT(BINARY,'123456'),CONVERT(BINARY,'123456'),

'1234567890','1234567890',CONVERT(BINARY,'1234567890'),

'1234567890','1234567890','1234567890'

--使用system_internals_allocation_units来获取该表的相关数据页

SELECTc.name,a.type_desc,

total_pages,used_pages,data_pages,

testdb.dbo.f_get_page(first_page)first_page_address,

testdb.dbo.f_get_page(root_page)root_address,

testdb.dbo.f_get_page(first_iam_page)IAM_address

FROMsys.system_internals_allocation_unitsa,sys.partitionsb,sys.objectsc

WHEREa.container_id=b.partition_idandb.object_id=c.object_id

ANDc.namein('testDataType')

--再使用dbcc page命令分析相关页面信息


相关字段数据及其数据存储信息和存储字节说明
DSC0007.jpg

对于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字符集的双字

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-294338-1-1.html 上篇帖子: SQL Server nested loop join 效率试验 下篇帖子: 【转帖】SQL Server 恢复模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表