资源描述:
《SQL Server 2008中的数据类型》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、SQLServer2008中的数据类型SQLServer表中的每一个字段都只能包含一个预先指定的特定数据类型,例如字符或数字。这个声明叫做数据类型。在这篇文章里,我们将比较和对照SQLServer2008的各种数据类型。此外,我们还将展示各种特定环境下哪种数据类型是最好的解决方法。在SQLServer2008中有超过35种的不同数据类型。分类 Microsoft将各种数据类型分为以下7种大的分类:精确数字、大约数字、日期和时间、字符串、Unicode字符串、二进制字符串和其它数据类型。 数字 有两种数字分类:
2、精确数字和大约数字。 精确数字包括Real和Float类型。在一般情况下,当需要科学符号时使用精确数字。科学符号是一种使用10的幂数来描述非常大或非常小的数字的方法(也称作指数符号)。 精确数字包括Decimals(小数)、Integers(整数)和Moneyamounts(货币值)。 一个Integer是一个没有小数或分数的计算数值。所有的负数、正数和零都是整数。SQLServer将整数分为四个部分: BigInt:从-9,223,372,036,854,775,808到9,223,372,036,854
3、,775,807 Int:从-2,147,483,648到2,147,483,648 SmallInt:从-32,768到32,767 TinyInt:从0到255 正确地设置大小为Int类型而不是将所有都设置为BigInt是有两个主要的原因的。首先是物理磁盘空间。对于BigInt来说每条记录占据8个字节,而Int只使用两个字节。另一个原因是确保你的应用程序只接收到它所预期的数据大小,从而避免了出现缓冲溢出的现象。 具有小数的精确数字包括Decimal、Numeric、Money和SmallMoney数据
4、类型。Decimal和Numeric类型功能上是一样的。就是说,它们的使用、计算和行为都是一样的,唯一的不同就是在数学定义上而不是SQLServer使用它们的方法上。大多数SQLServer应用程序使用Decimal。一个Decimal的长度最多可以达到38位。当定义了Decimal,它的总长度和右侧的小数点部分的最大长度也就被配置了。定义的位数越多,每条记录上使用的物理磁盘空间就越多。 Money和SmallMoney是小数点后固定的有四位的小数。SmallMoney的值可以从-214,748.3648到214
5、,748.3647,而Money值的范围是从-922,337,203,685,477.5808到922,337,203,685,477.5807。使用Money而不是一个Decimal的一个原因是可以选择在三位数后显示美元符号和逗号。 字符串 这一节将开始讨论字符串:Char、VarChar和Text。一个Char(字符)数据类型可以保存字母、数字和键盘字符。当定义了一个Char时,它的最大长度(可以达到8,000)就也固定了。想想一个Char可以将你能输入到记事本中的所有东西保存住——而且就像记事本,如果你输
6、入数字到一个Char字段,那么不能对它们执行数学操作。它们会被看做是文本字符,而不是数字。一般情况下,当输入每一条记录的字符数目都大致相同时,例如一个邮编货电话号码,这时就使用Char字段。如果数据的长度是每条记录都很不一样时,例如一个邮件地址,那么使用VarChar。一个VarChar是一个长度可变的Char(Var)。当创建了一个VarChar时,它的最大长度就也被定义了。使用VarChar而不是Char的一个主要原因是各自使用的物理磁盘空间的数量。在下面的例子里,创建了一个具有一个Char字段和一个VarCh
7、ar字段的表。它们都设置为大小最大为50. 图1 给每一个输入相同的测试数据。 图2 下面的TSQL返回物理磁盘上的字节空间数目,按行和列的形式。 SELECTDATALENGTH(ColChar)ASCharSize,DATALENGTH(ColVarChar)ASVarSize FROMtable1 图3 所以无论输入的数据是大是小,对于每一条记录Char字段都使用50个字节。 VarChar的另一个好处是可以指定不限制大小的能力。这是通过使用“Max”关键字来完成的,如同在Var
8、Char(Max)中一样。Max意味着大小可以超过8,000字节。此外,这个大小是不限制的。 最后一个字符串类型的是Text数据类型。Text和VarChar(Max)字段类似。它目前包括在SQLServer2008之中只用于向后兼容,在未来某个时候它将被废弃。 Unicode Unicode是一个标准的方法,它允许应用程序记录其它语言的字符而不仅仅是