自动限制类型
SQL Server能制动限制每个数据类型的取值范围。例如定义了一个int类型的字段,如果插入的数据大小在smallint 或者 tinyint取值范围内,那么SQL Server会自动将类型转换成smallint或者tinyint,这样在存储数据时,节约空间。
系统数据类型
整数数据类型
类型名称 | 说明 |
---|---|
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)
自定义数据类型
在基本数据类型上,根据实际需要由用户定义的数据类型。不是创造一个新的类型,而是在基本数据类型上添加一些限制约束。
总之作用不大。