sqlserver常⽤数据类型(精炼版)
数据类型是⼀种属性,⽤于指定对象可保存的数据的类型,SQL Server中⽀持多种数据类型,包括字符类型、数值类型以及⽇期类型等。数据类型相当于⼀个容器,容器的⼤⼩决定了装的东西的多少,将数据分为不同的类型可以节省磁盘空间和资源。
Sql Server 还能⾃动限制每个数据类型的取值范围,例如定义了⼀个类型为int的字段,如果插⼊数据时插⼊的值的⼤⼩在smallint或者tinyint范围之内, Sql Server 会⾃动将类型转换为smallint 或者tinyint,这样⼀来,在存储数据时,占⽤的存储空间只有int的1/2或则1/4. Sql Server数据库管理系统中的数据类型可以分为两类,分别是:系统默认的数据类型和⽤户⾃定义的数据类型。下⾯分别介绍这两⼤类数据类型的内容.
⼀:系统数据类型
Sql Server 提供的系统数据类型有⼀下⼏⼤类,共25种。 Sql Server会⾃动限制每个系统数据类型的取值范围,当插⼊数据库中的值超过了数据允许的范围时, Sql Server 就会报错。
1.整数数据类型
整数数据类型是常⽤的数据类型之⼀,主要⽤于存储数值,可以直接进⾏数据运算⽽不必使⽤函数转
换.
(1).bigint
每个bigint存储在8个字节中,其中⼀个⼆进制位表⽰符号位,其它63个⼆进制位表⽰长度和⼤⼩,可以表⽰-2的63次⽅~2的63次⽅-1范围内的所有整数。
(2).int
int或者integer,每个int存储在4个字节中,其中⼀个⼆进制位表⽰符号位,其它31个⼆进制位表⽰长度和⼤⼩,,可以表⽰-2的31次⽅~2的31次⽅-1范围内的所有整数。
(3).smallint
每个smallint类型的数据占⽤了两个字节的存储空间,其中⼀个⼆进制位表⽰整数值的正负号,其它15个⼆进制位表⽰长度和⼤⼩,,可以表⽰-2的15次⽅~2的15次⽅-1范围内的所有整数。
(4).tinyint
每个tinyint类型的数据占⽤了⼀个字节的存储空间,可以表⽰0~255范围内的所有整数.
2.浮点数据类型
浮点数据类型存储⼗进制⼩数,⽤于表⽰浮点数值数据的⼤致数值数据类型。浮点数据为近似值;浮点数值的数据则Sql Server中采⽤了只⼊不舍的⽅式进⾏存储,即当且仅当要舍⼊的数是⼀个⾮零数时,对其保留数字部分的最低有效位上加1,并进⾏必要的近位。
(1).real
可以存储正的或者负的⼗进制数值,它的存储范围从-3.40E+38~-1.18E-38、0以及1.18E-38~3.40E+38.每个real类型的数据占⽤4个字节的存储空间。
(2)float[(n)]
其中为⽤于存储float数值尾数的位数(以科学计数法表⽰),因此可以确定精度和存储⼤⼩。如果指定了n它必须是介于1和53之间的某个值。n的默认值为53.
其范围从-1.79E+308~-2.23E-308、0以及2.23E+308~1.79E-308。如果不指定数据类型float的长度,它占⽤8个字节的存储空间。float 数据类型可以写成float(n)的形式,n为指定float数据的精度,n为1~53之间的整数值。当n取1~24时,实际上定义了⼀个real类型的数据,系统⽤4个⾃⼰存储它。当n取25~53时,系统认为其是float类型,⽤8个字节存储它。
(3).decimal[(p[,s])]和numeric[(p[,s])
带固定精度和⼩数位数的数值数据类型。使⽤最⼤精度时,有效值从-10^38+1~10^38-1。numeric在功能上等价于decimal。
p(精度)指定了最多可以存储⼗进制数字的总位数,包括⼩数点左边和右边的位数,该精度必须是从1到最⼤精度38之间的值,默认精度为18.
s(⼩数位数)指定⼩数点右边可以存储的⼗进制数字的最⼤位数,⼩数位数必须是从0到p之间的值,仅在指定精度后才可以指定⼩数的位数。默认⼩数位数是0;因此,0<=s<=p。最⼤存储⼤⼩基于精度⽽变化。例如:decimal(10,5)表⽰共有10位数,其中整数5位,⼩数5位。
3.字符数据类型
字符数据类也是Sql Server中最常⽤的数据类型之⼀,⽤来存储各种字符,数字符号和特殊符号。在使⽤字符数据类型时,需要在其前后加上英⽂单引号或者双引号。
(1)char(n)
当⽤char数据类型存储数据时,每个字符和符号占⽤⼀个字节存储空间,n表⽰所有字符所占的存储空间,n的取值为1~8000。如不指定n
的值,系统默认n的值为1。若输⼊数据的字符串长度⼩于n,则系统⾃动在其后添加空格来填满设定好的空间;若输⼊的数据过长,则会截掉其超出部分。
(2). varhcar(n|max)
n为存储字符的最⼤长度,其取值范围是1~8000,但可根据实际存储的字符数改变存储空间,max表⽰最⼤存储⼤⼩是2的31次⽅-1个字节。存储⼤⼩是输⼊数据的实际长度加2个字节。所输⼊数据的长度可以为0个字符。如varchcar(20),则对应的变量最多只能存储20个字符,不够20个字符的按实际存储。
(3).nchar(n)
n个字符的固定长度Unicode字符数据。n值必须在1~4000之间(含),如果没有数据定义的或变量声明语句中指定n,默认长度为1。此数据类型采⽤Unicode字符集,因此每⼀个存储单位占两个字节,可将全世界⽂字囊括在内(当然除了部分⽣僻字)。
(4)nvarchar(n|max)
与varchar类似,存储可变长度Unicode字符数据。n值必须在1~4000之间(含),如果没有数据定义的或变量声明语句中指定n,默认长度为1。max指最⼤存储⼤⼩为2的31次⽅-1字节。存储⼤⼩是输⼊字
符个数的两倍+2个字节。所输⼊的数据长度可以为0个字符.
4.⽇期和时间数据类型
(1).date
存储⽤字符串表⽰的⽇期数据,可以表⽰0001-01-01~9999-12-31(公元元年1⽉1⽇到公元9999年12⽉31⽇)间的任意⽇期值。数据格式为“YYYY-MM-DD”:
YYYY:表⽰年份的四位数字,范围为0001~9999;
MM:表⽰指定年份中⽉份的两位数字,范围为01~12;
DD:表⽰指定⽉份中某⼀天的两位数字,范围为01~31(最⾼值取决于具体⽉份)
该数据类型占⽤3个字节的空间。
(2).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个字节的空间。
(3).datetime
⽤于存储时间和⽇期数据,从1753年1⽉1⽇到9999年12⽉31⽇,默认值为1900-01-01 00:00:00,当插⼊数据或在其它地⽅使⽤时,需⽤单引号或双引号括起来。可以使⽤“/”、“-”和“.”作为分隔符。该类型数据占⽤8个字节的空间。
(4).datetime2
datetime的扩展类型,其数据范围更⼤,默认的最⼩精度最⾼,并具有可选的⽤户定义的精度。默认格式为:YYYY-MM-DD
hh:mm:ss[.fractional seconds],⽇期的存取范围是0001-01-01~9999-12-31(公元元年1⽉1⽇到公元9999年12⽉31⽇).
(5).smalldatetime
smalldatetime类型与datetime类型相似,只是其存储范围是从1900年1⽉1⽇到2079年6⽉6⽇,当⽇期时间精度较⼩时,刻印使⽤smalldatetime,该类型数据占⽤4个字节的存储空间。
(6).datetimeoffset
⽤于定义⼀个采⽤24⼩时制与⽇期相组合并可识别时区的时间。默认格式是:“YYYY-MM-DD hh:mm:ss[.nnnnnnn][{+|-}hh:mm]”:
hh:两位数,范围是-14~14
mm:两位数,范围为00~59;
这⾥hh是时区偏移量,该类型数据中保存的是世界标准时间(UTC)值,eg:要存储北京时间2011年11⽉11⽇12点整,存储时该值将是2011-11-11 12:00:00+08:00,因为北京处于东⼋区,⽐UTC早8个⼩时。存储该数据类型数据时默认占⽤10个字节⼤⼩的固定存储空间.
5.⽂本和图形数据类型
decimal是整数数据类型(1).text
⽤于存储⽂本数据,服务器代码页中长度可变的⾮Unicode数据,最⼤长度为2的31次⽅-1(2147 483 647)个字符。当服务器代码页使⽤双字节字符时,存储仍是2147 483 647字节。
(2)ntext
与text类型作⽤相同,为长度可变的⾮Unicode数据,最⼤长度为2的30次⽅-1(1073 741 283)个字符。存储⼤⼩是所输⼊字符个数的两倍(以字节为单位).
(3).image
长度可变的⼆进制数据,范围为:0~2的31次⽅-1个字节。⽤于存储照⽚、⽬录图⽚或者图画,容量也是2147 483 647个字节,由系统根据数据的长度⾃动分配空间,存储该字段的数据⼀般不能使⽤insert语句直接输⼊。
6.货币数据类型
(1).money
⽤于存储货币值,取值范围为正负922 337 213 685 477.580 8之间。money数据类型中整数部分包含19个数字,⼩数部分包含4个数字,因此money数据类型的精度是19,存储时占⽤8个字节的存储空间。
(2).smallmoney
与money类型相似,取值范围为214 748.346 8之间,smallmoney存储时占⽤4个字节存储空间。输⼊数据时在前⾯加上⼀个货币符号,如⼈民币为¥或其它定义的货币符号。
7.位数据类型
bit称为位数据类型,只取0或1为值,长度1字节。bit值经常当作逻辑值⽤于判断true(1)或false(0),输⼊⾮0值时系统将其替换为1。
8.⼆进制数据类型
(1)binary(n)
长度为n个字节的固定长度⼆进制数据,其中n是从1~8000的值。存储⼤⼩为n个字节。在输⼊binary值时,必须在前⾯带0x,可以使⽤0xAA5代表AA5,如果输⼊数据长度⼤于定于的长度,超出的部分会被截断。
(2).varbinary(n|max)
可变长度⼆进制数据。其中n是从1~8000的值,max指⽰存储⼤⼩为2的31次⽅-1字节。存储⼤⼩为所输⼊数据的实际长度+2个字节。 在定义的范围内,不论输⼊的时间长度是多少,binary类型的数据都占⽤相同的存储空间,即定义时空间,⽽对于varbinary类型的数据,在存储时实际值的长度使⽤存储空间.
9.其他数据类型
(1).rowversion
每个数据都有⼀个计数器,当对数据库中包含rowversion列的表执⾏插⼊或者更新操作时,该计数器数值就会增加。此计数器是数据库⾏版本。⼀个表只能有⼀个rowversion列。每次修改或者插⼊包含rowversion列的⾏时,就会在rowversion列中插⼊经过增量的数据库⾏版本值。
公开数据库中⾃动⽣成的唯⼀⼆进制数字的数据类型。rowversion通常⽤作给表⾏加版本戳的机制。存储⼤⼩为8个字节。rowversion数据类型只是递增的数字,不保留⽇期或时间。
(2)timestamp
时间戳数据类型,timestamp的数据类型为rowversion数据类型的同义词,提供数据库范围内的唯⼀值,反映数据修改的唯⼀顺序,是⼀个单调上升的计数器,此列的值被⾃动更新。
在create table或alter table 语句中不必为提么timestamp数据类型指定列名。
eg:create table testTable (id int primary key,timestamp );
此时Sql Server数据库引擎将⽣成timestamp列名;但rowversion不具备这样的⾏为,在使⽤rowversion时,必须指定列名.
(3).uniqueidentifier
16字节的GUID(Globally Unique Identifier,全球唯⼀标识符),是Sql Server根据⽹络适配器地址和主机CPU时钟产⽣的唯⼀号码,其中,每个为都是0~9或a~f范围内的⼗六进制数字。例如:6F9619FF-8B86-D011-B42D-00C04FC964FF,此号码可以通过newid()函数获得,在全世界各地的计算机由次函数产⽣的数字不会相同。
(4).cursor
游标数据类型,该类型类似与数据表,其保存的数据中的包含⾏和列值,但是没有索引,游标⽤来建⽴⼀个数据的数据集,每次处理⼀⾏数据。
(5).sql_variant
⽤于存储除⽂本,图形数据和timestamp数据外的其它任何合法的Sql Server数据,可以⽅便Sql Server的开发⼯作。
(6).table
⽤于存储对表或视图处理后的结果集。这种新的数据类型使得变量可以存储⼀个表,从⽽使函数或过程返回查询结果更加⽅便、快捷。
(7).xml
存储xml数据的数据类型。可以在列中或者xml类型的变量中存储xml实例。存储的xml数据类型表⽰实例⼤⼩不能超过2GB。
⼆:⾃定义数据类型
Sql Server允许⽤户⾃定义数据类型,⽤户⾃定义数据类型是建⽴在Sql Server系统数据类型的基础上的,⾃定义的数据类型使得数据库开发⼈员能够根据需要定义符合⾃⼰开发需求的数据类型。⾃定义数据类型虽然使⽤⽐较⽅便,但是需要⼤量的性能开销,所以使⽤时要谨慎。当⽤户定义⼀种数据类
型时,需要指定该类型的名称、所基于的系统数据类型以及是否允许为空等。Sql Server为⽤户提供了两种⽅法来创建⾃定义数据类型。下⾯分别介绍这两种个定义数据类型的⽅法。
(1).使⽤对象资源管理器创建⽤户⾃定义数据类型
创建数据库Test-->【可编程性】-->【类型】节点,右击【⽤户定义数据类型】节点,在弹出的框中,按照说明相应操作即可。很简单,就不截图赘述了。
(2).使⽤存储过程创建⽤户⾃定义数据类型
触雷使⽤图形界⾯创建⾃定义数据类型,Sql Server中的系统存储过程sp_addtype也可为⽤户提供使⽤T_sql语句创建⾃定义数据类型的⽅法。其语法如下:
sp_addtype [@typename= ] type,
[@phystyle=] system_data_type
[,[@nulltype =] 'null_type']
其中,各参数的含义如下:
type:⽤于指定⽤户定义的数据类型的名称。
system_data_type:⽤于指定相应的系统提供的数据类型的名称及定义。注意:未能使⽤timestamp数据类型,当所使⽤的系统数据类型有额外的说明时,需要⽤引号将其括起来。
null_type:⽤于指定⽤户⾃定义的的数据类型的null属性,其值可为“null” 、“not null“或”notnull“。默认时与系统默认的null属性相同。⽤户⾃定义的数据类型的名称在数据库中应该是唯⼀的。
eg:sp_addtype homeAddress 'varchar(120)','not null'
删除⽤户⾃定义数据类型:
a.⽤图形界⾯删除,不做赘述。
b.⽤系统存储过程sp_droptype删除. eg:sp_droptype homeAddress,其中homeAddress为⽤户⾃定义数据类型名称.
注意:数据库正在使⽤的⽤户⾃定义数据类型,不能被删除。
作者:
出处:
本⽂以学习、研究和分享为主,版权归作者和博客园共有,欢迎转载,如果⽂中有不妥或者错误的地⽅还望⼤神您不吝指出。如果觉得本⽂对您有所帮助不如【推荐】⼀下吧!如果你有更好的建议,不如留⾔⼀起讨论,共同进步!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论