1
数据库技术及应用
1.7.1.2 4.1.2 SQL Server的数据类型
4.1.2 SQL Server的数据类型

SQL Server2008的数据类型可以分为两类:基本数据类型和用户自定义数据类型。SQL Server2008支持数字型、货币型、日期和时间型、字符型等多种基本数据类型。

1.数字数据类型

数字数据只包含数字。数字数据类型包括正数和负数、小数(浮点数)和整数。

整数由正整数和负整数组成,如39、25、-2和33967。在MicrosofT-SQL Server中,整数存储的数据类型是int,smallint和tinyint。int数据类型存储数据的范围大于smallint数据类型存储数据的范围,而smallint数据类型存储数据的范围大于tinyint数据类型存储数据的范围。使用int数据类型时,存储数据的范围是-2147483648~2147483647(每一个值要求4个字节存储空间)。使用smallint数据类型时,存储数据的范围为-32768~32767(每一个值要求2个字节存储空间)。使用tinyint数据类型时,存储数据的范围是0~255(每一个值要求1个字节存储空间)。精确小数数据在SQL Server中的数据类型是decimal和numeric。这种数据所占的存储空间根据该数据的小数点两边的总位数(精度precision,简写为p)和小数点右面的位数(刻度scale,简写为s)来确定,使用格式如:numeric(p[,s])或decimal(p[,s]),例如,numeric(6,2)表示精度为6,即总共有6位数,其中有4位整数和2位小数。在SQL Server中,近似小数数据的数据类型是float型和real型。

2.货币数据类型

在MicrosofT-SQL Server中,货币数据的数据类型是money型和smallmoney型。money数据类型要求8个存储字节,smallmoney数据类型要求4个存储字节。

3.日期和时间数据类型

日期和时间数据类型由有效的日期和时间组成。例如,有效的日期和时间数据包括“4/01/9812:15:00:00:00PM”和“1:28:29:15:01AM8/17/98”。前一个数据类型是日期在前,时间在后;后一个数据类型是时间在前,日期在后。在MicrosofT-SQL Server中,日期和时间数据类型主要包括datetime和smalldatetime两种类型。使用datetime数据类型时,所存储的日期范围是从1753年1月1日开始,到9999年12月31日结束(每一个值要求8个存储字节)。使用smalldatetime数据类型时,所存储的日期范围是从1900年1月1日开始,到2079年12月31日结束(每一个值要求4个存储字节)。在SQL Server2008中还新增了date、time等数据类型,具体如表4-1所示。

表4-1 SQL Server2008数据类型

(续表)

4.字符数据类型

字符数据的类型包括char、varchar和text。字符数据是由任何字母、符号和数字任意组合而成的数据。varchar是变长字符数据,其长度不超过8KB。char是定长字符数据,其长度最多为8KB。超过8KB的ASCII数据可以使用text数据类型存储。例如,因为HTML文档全部都是ASCII字符,并且在一般情况下长度超过8KB,所以这些文档可以以text数据类型存储在SQL Server中。

5.Unicode数据类型

Unicode数据类型包括nchar、nvarchar和ntext。在MicrosofT-SQL Server中,传统的非Unicode数据类型允许使用由特定字符集定义的字符。在SQL Server安装过程中,允许选择一种字符集。使用Unicode数据类型,列中可以存储任何由Unicode标准定义的字符。在Unicode标准中,包括了以各种字符集定义的全部字符。使用Unicode数据类型,所占用的字节空间是使用非Unicode数据类型所占用的空间的两倍。在SQL Server中,Unicode数据以nchar、nvarchar和ntext数据类型存储。使用这种字符类型存储的列可以存储多个字符集中的字符。当列的长度变化时,应该使用nvarchar字符类型,这时最多可以存储4000个字符。当列的长度固定不变时,应该使用nchar字符类型,同样,这时最多可以存储4000个字符。当使用ntext数据类型时,该列可以存储多于4000个字符。

6.二进制数据类型

SQL Server用binary、varbinary和image3种数据类型存储二进制数据,binary数据类型既可以是固定长度的(binary),也可以是变长度的。binary[(n)]是n位固定的二进制数据。varbinary[(n)]是n位变长度的二进制数据。在image数据类型中存储的数据是以位字符串存储的,不是由SQL Server解释的,必须由应用程序来解释。例如,应用程序可以使用BMP、TIEF、GIF和JPEG格式把数据存储在image数据类型中。

7.特殊数据类型

特殊数据类型包括前面没有提过的数据类型。特殊的数据类型有多种,即cursor、tabletimestamp、uniqueidentifier、xml等类型,具体用途如表4-1所示。

8.用户定义的数据类型

用户定义的数据类型基于MicrosofT-SQL Server中提供的数据类型。当几个表中必须存储同一种数据类型时,并且为保证这些列有相同的数据类型、长度和可空性时,可以使用用户自定义的数据类型。例如,可定义一种称为postal_code的数据类型,它基于char数据类型。

当创建用户定义的数据类型时,必须提供3个数据:数据类型的名称、所基于的系统数据类型和数据类型的可空性。