4.3 SQL Server数据类型

定义数据表结构需要明确表中各个属性的字段名、字段类型,所以SQL Server为了实现T-SQL的良好性能,提供了丰富的数据类型。下面列出常用数据类型说明。

4.3.1 数值型数据

(1)BIGINT

BIGINT可以存放−263~263−1范围内的整型数据。以BIGINT数据类型存储的每个值占用8字节,共64位,其中63位用于存储数字,1位用于表示正负。

(2)INT

INT也可以写成INTeger,可以存储−231~231−1范围内的全部整数。以INT数据类型存储的每个值占用4字节,共32位,其中31位用于存储数字,1位用于表示正负的区别。

(3)SMALLINT

SMALLINT可以存储−215~215−1范围内的所有整数。以SMALLINT数据类型存储的每个值占用2字节,共16位,其中15位用于存储数字,1位用于表示正负的区别。

(4)TINYINT

TINYINT可以存储0~255范围内的所有整数。以TINYINT数据类型存储的每个值占用1字节。

(5)DECIMAL和NUMERIC

在SQL Server中,DECIMAL和NUMERIC型数据的最高精度可达到38位,也就是说必须在−1038−1~1038−1之间。格式为DECIMAL(n, d)或NUMERIC(n, d),其中,n为总的位数,d为小数位数。

(6)FLOAT和REAL

FLOAT型数据范围为−1.79E+38~1.79E+38,REAL型数据范围为−3.40E+38~3.40E+38。其中,FLOAT可采用科学记数法表示,格式为FLOAT(n),n必须在1~53之间。

4.3.2 货币型数据

(1)MONEY

它存储的货币值由2~4字节整数构成。前面的一个4字节表示货币值的整数部分,后面的一个4字节表示货币值的小数部分。以MONEY存储的货币值的范围是−263~263−1,可以精确到万分之一货币单位。

(2)SMALLMONEY

它存储的货币值由两个2字节整数构成。前面的一个2字节表示货币值的整数部分,后面的一个2字节表示货币值的小数部分。以SMALLMONEY存储的货币值的范围为−214 748.3648~+214 748.3647,也可以精确到万分之一货币单位。

4.3.3 字符型数据

(1)CHAR

利用CHAR数据类型存储数据时,每个字符占用1字节的存储空间。CHAR数据类型使用固定长度来存储字符,最长可以容纳8000个字符。利用CHAR数据类型来定义表列或变量时,应该给定数据的最大长度。如果实际数据的字符长度短于给定的最大长度,则多余的字节会用空格填充;如果实际数据的字符长度超过了给定的最大长度,则超过的字符将会被截断。在使用字符型常量为字符数据类型赋值时,必须使用单引号(')将字符型常量括起来。

(2)VARCHAR

VARCHAR数据类型的使用方式与CHAR数据类型类似。SQL Server 利用VARCHAR数据类型来存储最长可以达到8000字符的变长字符。与CHAR数据类型不同,VARCHAR数据类型的存储空间随存储在表列中的每一个数据的字符数的不同而变化。

例如,定义表列为VARCHAR(20),那么存储在该列的数据最多可以长达20字节。但是在数据没有达到20字节时并不会在多余的字节上填充空格。

当存储在列中的数据的值大小经常变化时,使用VARCHAR数据类型可以有效地节省空间。

(3)TEXT

当要存储的字符型数据非常庞大,以至于8000字节完全不够用时,CHAR和VARCHAR数据类型都失去了作用。这时应该选择TEXT数据类型。

TEXT数据类型专门用于存储数量庞大的变长字符数据。最大长度可以达到231−1个字符,约2 GB。

4.3.4 日期/时间数据类型

(1)DATETIME

DATETIME数据类型范围为1753年1月1日~9999年12月31日,可以精确到千分之一秒。DATETIME数据类型的数据占用8字节的存储空间。

(2)SMALLDATETIME

SMALLDATETIME数据范围为1900年1月1日~2079年6月6日,可以精确到分。SMALLDATETIME数据类型占4字节的存储空间。