自动限制类型

SQL Server能制动限制每个数据类型的取值范围。例如定义了一个int类型的字段,如果插入的数据大小在smallint 或者 tinyint取值范围内,那么SQL Server会自动将类型转换成smallint或者tinyint,这样在存储数据时,节约空间。

系统数据类型

SQL Server中提供的系统数据类型共有20多种。

整数数据类型

类型名称 说明
INT 取值范围-2^31到2^31-1,占4字节
SMALLINT 取值范围-2^15到2^15-1,占2字节
BIGINT 取值范围-2^63到2^63-1,占8字节
TINYINT 取值范围0~255,占1字节
BIT 取值0,1或者NULL,字符串TRUE和FALSE可以转换成以下BIT值,TRUE=1,FALSE=0

浮点数据类型

浮点数据为近似值,浮点数据在SQL Server中只入不舍,要舍入的数是一个非0浮点数时,保留其最低有效位上的数字+1,并进行必要的进位。
如0.123456插入一个保留4位小数的浮点数,结果是0.1235

类型名称 说明
REAL 取值范围-3.40^38 ~ 3.40^38,real的同义词为float(24),数字精度为7位有效数字。占用4字节
FLOAT[(n)] n为用于存储FLOAT数值尾数的位数,因此可以确定精度和存储大小。n的取值范围1~53,n默认为53。取值范围在-1.79^308 ~ 1.79^308。占用8字节。当n等于1到24时,实际上它是一个real类型,占用4字节,当n>24他就是float类型,占用8字节
DECIMAL[(p[,s])] 固定精度和小数位数,使用最大精度时,取值范围-10^38+1 ~ 10^38-1
p(精度):指最多可以存储的十进制数字的总位数,包括小数左边和右边的位数。p的取值范围1到38之间。默认18。
s(小数位数):小数点右边的位数,取值范围0到p之间。只有在定义精度后才能定义小数位数,默认为0。
DECIMAL是精确类型,不会丢失精度。存储大小基于精度而变化,占用2~17字节
NUMERIC[(p[,s])] 功能等价于DECIMAL[(p[,s])]

字符数据类型

类型名称 说明
CHAR[(n)] 固定长度,非Unicode字符数据,长度n字节,n的取值范围1 ~ 8000。存储占用n字节
VARCHAR[(n|MAX)] 可变长度,非Unicode字符数据,n取值范围1 ~ 8000。MAX指最大存储大小为2^31-1字节。存储大小是输入数据的实际长度+2字节
TEXT 可变长度,非Unicode字符数据,最大长度为2^31-1字节。推荐使用VARCHAR(MAX)
NCHAR[(n)] 固定长度,Unicode字符数据,n取值范围1 ~ 4000。存储大小 2n 字节
NVARCHAR(n|MAX) 可变长度,Unicode字符数据,n取值范围1 ~ 4000。MAX指最大存储大小为2^31-1字节。存储大小是输入字符个数的2倍+2字节
NTEXT 可变长度,Unicode字符数据,最大长度2^31-1字节。存储大小是输入字符个数的2倍字节

CHAR,VARCHAR,NCHAR,NVARCHAR在使用时,如果没有指定n,默认长度为1.如果使用CAST函数时没有指定n,则默认长度为30。

日期和时间类型

类型名称 说明
DATE 范围 0001-01-01 ~ 9999-12-31。格式为YYYY-MM-DD。占用3字节空间。
DATETIME 存储时间和日期数据,默认值为1900-01-01 00:00:00,范围1753-01-01 ~ 9999-12-31。时间表示精度达到毫秒,占用8字节空间
DATETIME2[(小数秒精度)] DATETIME类型的扩展,其数据范围更大,默认的小数精度更高,并具有可选的用户定义精度。
格式:YYYY-MM-DD hh:mm:ss[.小数秒精度]。小数秒精度的取值范围1 ~ 7
范围0001-01-01 ~ 9999-12-31,占用空间6~8字节
DATETIMEOFFSET[(小数秒精度)] 采用24小时制与日期相结合,并可以识别出时区的日内时间。
格式YYYY-MM-DD hh:mm:ss[.小数秒精度][{+|-}hh:mm]
范围0001-01-01 ~ 9999-12-31
hh:两位数,范围-14~14。
mm:两位数,范围00~59
[{+|-}hh:mm]指时区的偏移量,该类型数据中保存的是世界标准时间(UTC)值。
例如:北京时间2011年11月11日12点整,存储datetimeoffset时,将是 :2011-11-11 12:00:00+08:00,因为北京处于东八区,比UTC早8个小时。
该类型占用10字节。
SMALLDATETIME 与DATETIME类似。
范围1900-01-01 ~ 2079-06-06
精度到分钟。
占用4字节
TIME[(小数秒精度)] 记录一天中的某个时间。没有时区,基于24小时制。
范围00:00:00.0000000~23:59:59.9999999
格式为hh:mm:ss[.nnnnnnn],0~7个n表示秒的小数部分。
固定占用5个字节。

插入日期数据或者在其他地方使用时,用单引号或者双引号括起来。 可以使用 / - 作为分隔符。

货币数据类型

类型名称 说明
MONEY 取值范围-2^63 ~ 2^63-1,占用8字节。整数19位,小数4位
SMALLMONEY 取值范围-2^31 ~ 2^31-1,占用4字节。整数6位,小数4位

在使用货币类型时,应在数据前加上货币符号

二进制数据类型

类型名称 说明
BINARY [(n)] 固定长度n字节二进制数据,n的取值范围1~8000,占n字节
VARBINARY [(n | MAX)] 可变长度二进制数据,n的取值范围1~8000,MAX值最大存储大小2^31-1字节。存储大小为所输入的实际长度+2字节
IMAGE 可变长度二进制数据,一般用来存图像,占用0 ~ 2^31-1字节

BINARY和VARBINARY使用注意事项 如果没有指定n,则默认长度为1。如果使用CAST函数时没有指定n,则默认长度为30。 如果列数据项大小一样,推荐使用BINARY,如果列数据项的大小差异很大则使用VARBINARY,当数据超过8000字节时,使用VARBINARY(MAX)

自定义数据类型

在基本数据类型上,根据实际需要由用户定义的数据类型。不是创造一个新的类型,而是在基本数据类型上添加一些限制约束。
总之作用不大。