数据类型的分类为(3种):
- 系统数据类型
- 别名数据类型:用户可以为系统数据类型提供一个别名,并且可以对数据类型做进一步限制,这样可以保持数据库和应用程序的一致性。
- 用户自定义数据类型:引入的托管代码中的数据类型,包括CLR中的系统数据类型和CLR中用户自定义数据类型。
- 整数数据类型:
tinyint 存储1字节( 8位),值范围 0-255
smallint 存储2字节(16位),值范围 -32768-32767
int 存储4字节(32位),值范围 -2147483648-2147483647
bigint 存储8字节(64位), 值范围 -2^63 - 2^63-1,存储的是非常大的整数值
- 分数数据类型:
decimal ANSI兼容,允许指定整数位和小数位。
numeric 功能上和decimal一样。
money、smallmoney遗留下来的数据类型,用来存储货币值,四个小数位精度,常使用decimal代替这个数据类型。
bit 存储1位值,存储上有优化,如果一张表中少于8个的bit列,他们将被存储在一个字节中,通常用来存储boolean值;在SQL Server中bit值没有字符串形式,True和False只是可以转化为bit值,就像整数值1、0可以转化为bit值一样,底层bit值存储的不是True或False,也不是整数值1、0,而只是一位值。高级语言中False都使用0来存储,而True存储根据语言不同使用不同的值,因此在检测boolean值时,使用@inputvalue=0来检测false,使用@inputvalue<>0来检测true,不要使用@inputvalue=1来检测true值,在有的语言中得不到预期的结果。bit类型值还可以存储null值,也就是说bit类型值共有三种状态0,1,null
real 存储 4字节(32位),精确到7位小数
float(n) n代表用来存储尾数的位数,n默认等于53。当n在1-24范围时,n=24,即精度为7位小数,使用4字节存储,也就是real数据类型的值;当n在25-53范围时,n=53,即精度15位小数,使用8字节存储。
date 符合ANSI标准,范围0001-01-01 ~ 9999-12-31,精确到天
time 符合ANSI SQL标准,范围00:00:00.0000000 ~23:59:59.9999999,精确到100纳秒,允许指定小数位数, 即定义纳秒的位数
datetime2 date和time类型的组合
datetime 旧版本的日期时间类型,范围1753-01-01 ~ 9999-12-31,精确到3.33毫秒,datetime类型根据语言设置将字符串转化为日期,"YYYYMMDD"总是可以转化为正确的日期时间类型,"YYYY-MM-DD"可能会被当做"YYYY-DD-MM"格式进行转化,取决于设置,date类型不会有这样的行为
datetimeoffset datetime2和timezone offset的组合,日期时间部分代表本地时间,timezone offset范围-14:00 to+14:00,表示和UTC时间的偏移量,注意date类型是和时区无关的
GUID 数字分配器,保证一个程序生成的值和其他程序生成的值不冲突,是128位值;在SQL Server中对应的数据 类型就是uniqueidentifier,该类型允许的操作只包括=、<>、<、>、<=、>=以及是否为null的检测IS NULL、IS NOT NULL。
Unicode常量要求在前面都加上N前缀,使用LEN()函数返回字符的数量,使用DATALENGTH()返回字节数量。
- 字符数据类型:
char 和 nchar 存储固定长度的字符,如果这两个类型值的字符长度不够的话,在尾部使用空格填充,使用时通常都需要去掉尾部的空格!char使用单字节存储,nchar采用双字节存储
varchar 和 nvarchar 用来存储变长字符串,允许你指定一个字符串的最大长度,nvarchar用来存储unicode字符(即双字节字符),varchar和nvarchar限制在8000和4000个字符上限,正好是数据库中一个数据页的大小
varchar(max)和nvarchar(max) 存储更长的字符,它们允许存储高达2GB的数据
text和ntext 旧数据类型,被启用,使用varchar(max)和nvarchar(max)替换这两个数据类型
SortRules 使用的字母表或者语言
Pref 是否大写字母优先
- 其他数据类型:
binary、varbinary、varbinary(max) 用来存储任意的大的二进制对象(blobs)
image 已经被遗弃,应该使用varbinary(max)
hierarchyid 是在托管代码中实现的,代表树中的节点
sql_variant 用来存储未知类型的数据,很少使用
xml
cursor 在构造基于游标的代码时,保存对游标的引用
table 保存整个结果集
以上只是个人感觉比较常用的数据库数据类型,至于其他的涉及到的话,可以进一步参考官方资料。