读书频道 > 网站 > 网页设计 > SQL Server数据库管理与开发实用教程
3.2.1 系统数据类型
15-11-05    下载编辑
收藏    我要投稿   
本书通过实例循序渐进地讲解了SQL Server 2014的理论知识和基本操作。主要内容包括:数据库的基本原理、SQL Server 2014概述、数据库和表的创建与管理、表中数据的查询、Transact_SQL、索引、视图、游标、事立即去当当网订购

SQL Server 2014提供的系统数据类型有30多种,可以分为十大类。SQL Server会自动限制每个系统数据类型的值的范围,当插入表中的值超过了数据类型允许的范围时,SQL Server就会报错。

1.二进制数据类型

二进制数据类型包括两种:binary、varbinary。

binary[(n)]:长度为n字节的固定长度二进制数据,n必须是1~8000的值。该类型的数据所占存储空间的大小为n字节。在输入binary类型的值时,应以十六进制格式输入,即以0x打头,后面使用0~9和A~F表示。例如,输入0x28B。如果输入数据长度大于定义的长度,超出的部分会被截断。

varbinary[(n|max)]:n字节可变长二进制数据,n必须是1~8 000的值。该类型数据所占存储空间大小为实际输入数据长度+2字节,而不是n字节。Max指示最大存储空间大小为231-1字节。

注意 在定义的范围内,不论输入的数据长度是多少,binary类型的数据都占用相同的存储空间,即定义时空间;而对于varbinary类型的数据,在存储时根据实际值的长度使用存储空间。

2.整数数据类型

整数数据类型是常用的数据类型之一,主要用于存储数值数据,可以直接进行数学运算而不必使用函数转换。整数数据类型有5种:bit、int、bigint、smallint、tinyint。

bit:为位数据类型,该类型的数据只能取0或1,长度为1字节。通常使用bit类型的数据表示真假逻辑关系,如on/off、yes/no、true/false等。当输入非零值时,系统将其转换为1。需注意,不能对bit类型的字段使用索引。

int:每个int类型的数据所占用存储空间大小为4字节,可以存储从-231~231-1范围内的整数数据。

bigint:每个bigint类型的数据所占存储空间大小为8字节,可以存储从-263~263-1范围内的整数数据。

smallint:每个smallint类型的数据所占存储空间大小为2字节,可以存储从-215~
215-1范围内的整数数据。

tinyint:每个tinyint类型的数据所占存储空间大小为1字节,可以存储0~255的所有整数。

3.浮点数据类型

浮点数据类型包括float和real两种类型,用于表示浮点数值数据的大致数值。浮点数据为近似值,因此,并非数据类型范围内的所有值都能精确地表示。

real:可以存储正的或者负的十进制数值,占4字节的存储空间,其数据范围是-3.40E+38~-1.18E-38、0以及1.18E-38~3.40E+38。

float[(n)]:该类型数据范围为-1.79E+308~-2.23E-308、0以及2.23E-308~
1.79E+308。其中,n为用于存储float数值尾数的位数(以科学计数法表示)。如果指定了n,则它必须是1~53的某个值,n的默认值为53。当n取1~24时,实际上是定义了一个real类型的数据,系统用4字节存储它;当n取25~53时,系统认为是float类型,用8字节存储它。
浮点数据类型容易发生舍入误差,因此一般在货币运算上不使用它,但是在科学运算或统计计算等不要求绝对精确的运算场合,使用浮点数据类型非常方便。

4.精确小数数据类型

精确小数数据类型包括decimal[(p[,s])]和numeric[(p[,s])]两种,可以精确指定该小数的总位数p(必须是1~38,默认为18)和小数点右边的位数s(必须是0~p,默认为0)。例如,decimal(12,5)表示共有12位数,其中整数7位,小数5位。这两种数据的取值范围都是-(1038-1)~1038-1。

注意

仅在指定了小数的总位数p后,才可以指定小数点右边的位数,并且0<=s<=p。

decimal和numeric的区别在于:numeric类型的列可以带有IDENTITY关键字。

5.货币数据类型

货币数据类型专门用于处理货币数据,包括money和smallmoney。

money:以money数据类型存储的货币值的范围为±922 337 213 685 477.580 8之间,精确到货币单位的万分之一。money数据类型要求由两个4字节整数构成,前面的4字节表示货币值的整数部分,后面的4字节表示货币值的小数部分。

smallmoney:以smallmoney数据类型存储的货币值介于±214 748.364 8之间,精确到货币单位的万分之一。smallmoney数据类型要求由两个2字节整数构成,前面的2字节表示货币值的整数部分,后面的2字节表示货币值的小数部分。

6.日期/时间数据类型

日期/时间数据类型可以存储日期数据、时间数据以及日期、时间的组合数据,包括date、time、datetime、datetime2、smalldatetime以及datetimeoffset 6种数据类型。

date:存储用字符串表示的日期数据,可以表示公元元年1月1日到公元9999年12月31日(0001-01-01到9999-12-31)间的任意日期值。数据格式为“YYYY-MM-DD”,其中YYYY为表示年份的4位数字,范围是0001~9999;MM表示指定年份中的月份的两位数字,范围为01~12;DD表示指定月份中某一天的两位数字,范围为01~31(最大值取决于具体月份)。每个date类型的数据占用3字节的空间。

time:以字符串形式记录一天中的某个时间,取值范围为00:00:00.0000000—23:59:59.9999999,数据格式为“hh:mm:ss[.nnnnnnn]”。其中,hh为表示小时的两位数字,范围为0~23;mm为表示分钟的两位数字,范围为0~59;ss为表示秒的两位数字,范围为0~59;n*表示秒的小数部分,0~7位数字,范围为0~9999999。每个time类型的数据占用5字节的空间。

datetime:存储从1753年1月1日到9999年12月31日的日期和时间数据,默认值为1900-01-01 00:00:00。当插入或在其他地方使用datetime类型的数据时,需用单引号或双引号括起来,而年、月、日之间的分隔符可以使用“/”、“-”或“.”。每个datetime类型的数据占用8字节的存储空间。

datetime2:datetime类型的扩展,其数据范围更大,默认的小数精度更高,并具有可选的用户定义的精度。默认格式是YYYY-MM-DD hh:mm:ss[.fractionaseconds],日期存取范围是公元元年1月1日到公元9999年12月31日(0001-01-01~9999-12-31)。

smalldatetime:存储从1900年1月1日到2079年6月6日的日期和时间数据,可以精确到1分钟。每个smalldatetime类型的数据占用4字节的存储空间。

datetimeoffset:用于定义一个采用24小时制与日期相组合并可识别时区的一日内时间。默认格式为“YYYY-MM-DD hh:mm:ss[.nnnnnnn][{+|-}hh:mm]”。其中,{+|-}hh:mm为时区偏移量,hh为两位数,范围为-14~+14;mm为两位数,范围为00~59。该类型数据中保存的是世界标准时间(UTC)值,如果要存储北京时间2015年4月8日12点整,存储时,该值将是2015-04-08 12:00:00+08:00,因为北京处于东八区,比UTC早8个小时。存储该类型数据时默认占用10字节的固定存储空间。

7.字符数据类型

字符型数据是由字母、数字和符号组合而成的数据,如'beijing'、'zyf123@126.com'等都是合法的字符型数据。在使用字符类型数据时,需要在其前后加上英文单引号或者双引号。字符数据类型包括char和varchar。

char[(n)]:当用char数据类型存储数据时,每个字符占用1字节的存储空间。n表示所有字符占用的存储空间,n的取值为1~8000。若不指定n值,则系统默认n为1。例如,利用char数据类型来定义变量。

declare @name char(10) --定义变量name为char类型,最长可容纳10个字符

set @name='zhangsan' --字符型常量必须用单引号括起来,这时实际赋给变量的字符串长度为8,短于给定的最大长度10,则多余的字节会以空格填充

set @name='zhangsan123' --如果实际赋给变量的字符长度超过了给定的最大长度10,

则超过的字符将会被截断,即变量name中存储的字符串为'zhangsan12'

varchar(n|max):n为存储字符的最大长度,取值范围为1~8000,但可根据实际存储的字符数改变存储空间;max表示最大存储大小是231-1字节。存储大小是输入数据的实际长度加2字节。例如,声明某个变量的类型为varchar(20),则该变量最大只能存储20个字符,不够20个字符时按实际存储。

8.Unicode数据类型

Unicode数据类型包括nchar和nvarchar。

nchar(n):n个字符的固定长度的Unicode字符数据,n的取值范围是1~4000,如果缺省n,则默认长度为1。此数据类型采用Unicode标准字符集,因此每个字符所占存储空间为2字节,整个Unicode数据所占的存储空间数=字符数×2(字节)。

nvarchar(n|max):与varchar相似,用于存储可变长度的Unicode字符数据,括号中的n用来定义字符数据的最大长度,取值范围是1~4000,如果没有指定n,默认长度为1。max指示最大存储大小为231-1字节。

9.文本和图形数据类型

text:专门用于存储数量庞大的变长的非Unicode字符数据。最大长度可达231-1(2147483647)个字符。

ntext:用于存储可变长度的Unicode字符数据,最多可以存储230-1个Unicode字符数据。所占存储空间大小是输入字符数的两倍。

image:可变长度的二进制数据,用于存储字节数超过8KB的数据,如Microsoft Word文档、Microsoft Excel图表和图像数据等,其最大长度为231-1字节。该类型的数据由系统根据数据的长度自动分配空间,存储该字段的数据一般不能使用INSERT语句直接输入。

注意 在Microsoft SQL Server的未来版本中,将删除text、ntext和image数据类型,在新开发的项目中要避免使用这些数据类型,而用varchar(max)、nvarchar(max)、varbinary(max)3种类型。

10.特殊数据类型

sql_variant数据类型可以应用在列、参数、变量和函数返回值中,该数据类型可以存储除text、ntext、image、timestamp和sql_variant以外的各种数据。

rowversion:公开数据库中自动生成的唯一二进制数字的数据类型。rowversion通常用作给表行加版本戳的机制。该类型数据所占存储空间大小为8个字节。每个数据库都有一个计数器,当对数据库中包含rowversion列的表执行插入或更新操作时,该计数器的值就会增加。此计数器是数据库行版本。一个表只能有一个rowversion列。每次修改或插入包含rowversion列的行时,就会在rowversion列中插入经过增量的数据库行版本值。

timestamp:时间戳数据类型,该数据类型为rowversion数据类型的同义词,提供数据库范围内的唯一值,反映数据修改的相对顺序,是一个单调上升的计数器,此列的值被自动更新。

注意 微软将在后续版本的SQL Server中删除timestamp语法的功能,因此在新的开发工作中,应避免使用该功能,并修改当前还在使用该功能的应用程序。

uniqueidentifier:16字节的全球唯一标识符,是SQL Server根据网络适配器地址和主机CPU时钟产生的唯一号码。每个表只能包含一个uniqueidentifier列。

cursor:游标数据类型,该类型类似于数据表,其保存的数据中包含行和列值,但是没有索引。游标用来建立一个数据的数据集,每次处理一行数据。

table:一种特殊的数据类型,存储对表或视图处理后的结果集。这种数据类型使得变量可以存储一个表,从而使函数或过程返回查询结果更加方便、快捷。该类型只能用于定义局部变量或用户定义函数的返回值。

xml:用于存储XML数据。可以在列中或者xml类型的变量中存储xml实例。存储的xml数据类型表示的实例大小不能超过2GB。

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.3 功能
下一篇:1.5 小结
相关文章
图文推荐
JavaScript网页动画设
1.9 响应式
1.8 登陆页式
1.7 主题式
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站