当前位置:文档之家› SQL Server 2008中的数据类型

SQL Server 2008中的数据类型

SQL Server 2008中的数据类型
SQL Server表中的每一个字段都只能包含一个预先指定的特定数据类型,例如字符或数字。

这个声明叫做数据类型。

在这篇文章里,我们将比较和对照SQL Server 2008的各种数据类型。

此外,我们还将展示各种特定环境下哪种数据类型是最好的解决方法。

在SQL Server 2008中有超过35种的不同数据类型。

分类
Microsoft将各种数据类型分为以下7种大的分类:精确数字、大约数字、日期和时间、字符串、Unicode字符串、二进制字符串和其它数据类型。

数字
有两种数字分类:精确数字和大约数字。

精确数字包括Real和Float类型。

在一般情况下,当需要科学符号时使用精确数字。

科学符号是一种使用10的幂数来描述非常大或非常小的数字的方法(也称作指数符号)。

精确数字包括Decimals(小数)、Integers(整数)和Money amounts(货币值)。

一个Integer是一个没有小数或分数的计算数值。

所有的负数、正数和零都是整数。

SQL Server将整数分为四个部分:
BigInt:从-9,223,372,036,854,775,808到9,223,372,036,854,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 数据类型。

Decimal和Numeric类型功能上是一样的。

就是说,它们的使用、计算和行为都是一样的,唯一的不同就是在数学定义上而不是SQL Server使用它们的方法上。

大多数SQL Server应用程序使用Decimal。

一个Decimal的长度最多可以达到38位。

当定义了Decimal,它的总长度和右侧的小数点部分的最大长度也就被配置了。

定义的位数越多,每条记录上使用的物理磁盘空间就越多。

Money和SmallMoney是小数点后固定的有四位的小数。

SmallMoney的值可以从- 214,748.3648到214,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可以将你能输入到记事本中的所有东西保存住——而且就像记事本,如果你输入数字到一个Char字段,那么不能对它们执行数学操作。

它们会被看做是文本字符,而不是数字。

一般情况下,当输入每一条记录的字符数目都大致相同时,例如一个邮编货电话号码,这时就使用Char 字段。

如果数据的长度是每条记录都很不一样时,例如一个邮件地址,那么使用VarChar。

一个VarChar是一个长度可变的Char(Var)。

当创建了一个VarChar时,它的最大长度就也被定义了。

使用VarChar而不是Char的一个主要原因是各自使用的物理磁盘空间的数量。

在下面的例子里,创建了一个具有一个Char字段和一个VarChar字段的表。

它们都设置为大小最大为50.
图1
给每一个输入相同的测试数据。

图2
下面的TSQL返回物理磁盘上的字节空间数目,按行和列的形式。

SELECT DATALENGTH(ColChar) AS CharSize, DATALENGTH(ColVarChar) AS VarSize
FROM table1
图3
所以无论输入的数据是大是小,对于每一条记录Char字段都使用50个字节。

VarChar的另一个好处是可以指定不限制大小的能力。

这是通过使用“Max”关键字来完成的,如同在VarChar(Max)中一样。

Max意味着大小可以超过8,000字节。

此外,这个大小是不限制的。

最后一个字符串类型的是Text数据类型。

Text和VarChar(Max)
字段类似。

它目前包括在SQL Server 2008之中只用于向后兼容,在未来某个时候它将被废弃。

Unicode
Unicode是一个标准的方法,它允许应用程序记录其它语言的字符而不仅仅是我们自己的。

当你建立多语言应用程序或全球web网站时,Unicode就很方便了。

Char和VarChar数据类型都可以配置为允许Unicode,只要在它们之前加个字母“n”,如同nChar和nVarChar。

这个灵活性的代价在于增大了磁盘空间的使用。

大略估计,Unicode 所需的磁盘空间大概是两倍。

二进制字符串
二进制字符串是用于保存非字符的数据,例如图片或媒体文件。

有两种数据类型用于此:Binary和VarBinary。

它们的配置就像Char 和VarChar。

VarBinary(Max)可以用来存储不限制大小的文件。

还有一个遗留数据类型叫做Image,但是它在SQL Server的未来版本中将不再出现。

其它数据类型
有7个其它的数据类型,包括Cursor、HierachyID、SQL Variant、Table、TimeStamp、UniqueIdentifier和XML。

数据类型TimeStamp被RowVersion取代了。

UniqueIdentifier是一个独特的GUID。

当你不知道要用什么数据类型时可以使用SQL Variant数据类型。

它存储任何东西都是8,000个字节。

如果你使用XML,那么使用XML数据类型而不要使用一个VarChar。

XML类型允许绑定到集合上。

日期和时间
SQL Server 2008包含新的日期和时间数据类型。

总结
在SQL Server 2008中有超过35种的不同数据类型。

如果你的应用程序需要比较或管理不同数据类型的字段,那么可以使用Cast和Convert函数。

例如一个包含数字的Char字段可以转换为一个Int,然后就可以对它进行数学操作了。

-------------------------------
字段类型描述
bit 0或1的整型数字
int 从-2^31(-2,147,483,648)到2^31(2,147,483,647)的整型数字smallint 从-2^15(-32,768)到2^15(32,767)的整型数字
tinyint 从0到255的整型数字
decimal 从-10^38到10^38-1的定精度与有效位数的数字
numeric decimal的同义词
money 从-2^63(-922,337,203,685,477.5808)到
2^63-1(922,337,203,685,477.5807)的货币数据,最小货币单位千分之十smallmoney 从-214,748.3648到214,748.3647的货币数据,最小货币单位千分之十
float 从-1.79E+308到1.79E+308可变精度的数字
real 从-3.04E+38到3.04E+38可变精度的数字
datetime 从1753年1月1日到9999年12日31的日期和时间数据,最小时间单位为百分之三秒或3.33毫秒
smalldatetime 从1900年1月1日到2079年6月6日的日期和时间数据,最小时间单位为分钟
timestamp 时间戳,一个数据库宽度的唯一数字uniqueidentifier 全球唯一标识符GUID
char 定长非Unicode的字符型数据,最大长度为8000
varchar 变长非Unicode的字符型数据,最大长度为8000
text 变长非Unicode的字符型数据,最大长度为2^31-1(2G)
nchar 定长Unicode的字符型数据,最大长度为8000
nvarchar 变长Unicode的字符型数据,最大长度为8000
ntext 变长Unicode的字符型数据,最大长度为2^31-1(2G)
binary 定长二进制数据,最大长度为8000
varbinary 变长二进制数据,最大长度为8000
image 变长二进制数据,最大长度为2^31-1(2G)。

相关主题