SQL Server 2008中的数据类型

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)

相关主题
相关文档
最新文档