【SQL基础】T-SQL数据类型

时间:2022-10-19 17:14:06

      主要学习T-SQL的数据类型:数值型数据类型,字符型数据类型,临时数据类型,混合型数据类型,附带有VARDECIMAL的DECIMAL存储类型。

     1、数值数据类型

       数值数据类型用于代表数据。具体看下表:

数据类型

详细说明

INTEGER

表示能够用4个字节保存的整数值,范围包括-2,147,483,648(-2~31)至2,147,483,647(2~31-1)。INT是INTEGER的缩写形式。

SMALLINT

表示能够用2个字节保存的整数值,范围从-32768(-2~16)至32767(2~16- 1)。

TINYINT

表示能够用1个字节保存的,零以上的整数值,范围为0至255

BIGINT

表示能够用8个字节保存的整数值。范围为-2~63至2~63-1

DECIMAL(p,[s])

描述定点直。p(精确度)指定数字个数和假定的小数点s(刻度)数字。DECIMAL值可以用5-17个字节保存,由p值决定字节个数。DEC为DECIMAL的缩写。

NUMERIC(p,[s])

和DECIMAL相同。

REAL

适用于浮点值。包括正数值和负数值。正数值范围大约为2.23E-308至1..79E+308,负数值为-1.18E-38至-1.18E+38。

FLOAT[(p)]

表示浮点值,如REAL。p定义精确度,即p<25表示单精度(4个字节),p >=25为双倍精密度(8个字节)。

MONEY

表示币值。MONEY值和8字节的DECIMAL值一样。都是小数点后4个数字。

SMALLMONEY

和MONEY数据类型一样,只是用4个字节保存。

 

      2、字符型数据类型

      字符型数据类型用两种普通形式。它们可以是单字节的字符串,还可以使Unicode字符串。此外,字符串有固定或可变长度。具体看下表:

数据类型

说明

CHAR[(n)]

表示单字节,有固定长度的字符创,其中n为字符串内的字符个数。n的最大值为8000。如果省略了n,那么字符串的长度就假定为1。

VARCHAR[(n)]

表示单字节的字符可变长度的字符串(0<n<=8000)。和CHAR数据类型相反,VARCHAR数据值能够在它的实际长度中保存。

NCHAR[(n)]

保存固定长度的Unicode字符。CHAR和NCHAR数据类型之间最主要的区别为NCHAR数据类型的每个字符都可以用2个字节保存。而CHAR数据类型的每个字符只用1个字节的存储空间。因此,NCHAR列中字符的个数最多维4000。

NVARCHAR[(n)]

保存具有可变长度的Unicode字符串。VARCHAR和NVARCHAR数据类型之间的最主要区别为每个NVARCHAR字符都能用2个字节保存。而VARCHAR字符只用1个字节的存储空间。NVARCHAR列中的字符个数最多为4000。

 

      注:VARCHAR数据类型和CHAR数据类型基本一样,只有一点不同,如果一个CHAR(n)字符串比n个字符要短,那么其余的字符串就会用空格来填充。VARCHAR数据类型经常用数据长度存储。

 

      3、临时数据类型

      T-SQL支持的临时数据类型有:DATETIME、SMALLDATETIME、DATE、TIME、DATETIME2和DETETINEOFFSET。

      DATETIME和SMALLDATETIME数据类型指定日期和时间,每个值都为整数并分别用4个字节或2个字节保存。 DATETIME和SMALLDATETIME的值是作为两个单独的数值保存的。DATETIME日期值的范围为01/01/1900至12/31/9999。SMALLDATETIME相应的值为01/01/1900至06/06/2079。时间部分能够再用4个字节或2个字节保存。它表示午夜过后的一秒的三百分之一(DATETIME)或分钟(SMALLDATETIME)。

      如果只想保存日期或时间部分,那么使用DATETIME和SMALLDATETIME非常不方便。SQL SERVER 2008新增新的数据类型:DATE和TIME,这两种数据类型只能分别保存DATATIME数据的DATA或TIME部分。DATE数据类型用3个字节的保存并且范围为01/01/0001至12/31/9999。TIME数据类型用3-5个字节保存,且精确到100ns。

     DATETIME2数据类型也是一种新的数据类型,用于保存精度度很高的日期和时间数据。这种数据类型能够根据要求定义可变长度。存储大小为6-8个字节。时间部分的精确度为100ns。

 

     4、混合型数据类型

     T-SQL的混合数据类型有:Binary,BIT,大对象数据类型,CURSOR,UNIQUEIDENTIFIER,SQL_VARTANT,TABLE,XML,Spatial,HIERARCHYID,TIMESTAMP和自定义数据类型。

     4.1 BINARY和BIT

     BINARY和VARBINARY数据类型是两种二进制的数据类型。它们表示系统内部格式的数据对象。它们用来存储位串,因此这些值都是十六进制的数字。

数据类型

详细说明

BINARY[(n)]

指定有固定长度和n个字节的位串(0<n<=8000)

VARBINARY[(n)]

指定一个为串的可变长度,最高值为n个字节(0<n<=8000)

BIT

用于指定Boolean数据类型,它包含三个值:TRUE,FALSE和NULL。

 

      4.2 大对象数据类型

      大对象就是最大长度为2GB的数据对象。这些数据对象一般用来存储大型的文本数据、加载模块和音频/视频文件。T-SQL支持两种不同的指定和访问方式:使用VARCHAR(MAX),NVARCHAR(MAX)和VARBINARY(MAX)的数据类型;使用所谓的文本和图像数据类型。

      TEXT、NTEXT和IMAGE数据类型组成了所谓的文本/图像数据类型。IMAGE类型的数据对象包含所有的数据(下载模块、音频/视频),而TEXT和NTEXT数据类型的数据对象包含文本数据。

      文本/图像数据类型和数据库的其他值区别保存默认值,存储方式为使用指向该数据字段的B-树型结构。而对于含有文本/图像数据类型的列来说,在数据行中存储了16字节的指示器,指定能找到数据的地方。

      如果文本/图像数据小于32KB,指示器就指向了B-树型结构中的根部节点,该节点长度约为84字节。根部节点指向数据的物理模块。如果数据总量大于32KB,Database Engine就会在数据模块和根部节点建立中间节点。由于每个表都包含一个以上的有这种数据的列,列中的所有值都存储在一起。然而,一个物理页面能只包含单个表中的文本/图像数据。

      文本/图像数据类型有很多局限性。不能把他们当作本地变量。它们也不能作为索引的一部分,不能用在WHERE、ORDER BY和GROUP BY的子句中。有些时候可以使用VARCHAR(MAX),NVARCHAR(MAX)和VARBINARY(MAX)来代替文本/图像数据类型。

      4.3  CURSOR   

      4.4  UNIQUEIDENTIFIER

      UNIQUEIDENTIFIER数据类型值是唯一辨别数字,它是用16个字节存储的二机制字符串,和全球唯一识别码密切相关,保证了在世界范围内的唯一性。因此,通过运用数据类型,可以在分布式的计算机中识别数据和对象。使用NEWID和NEWSEQUUENTIALID函数可以进行列或UNIQUEIDENTIFIER类型的变量初始化,并且字符串常量是用十六进制数字和连字符这种特殊格式书写的。

      4.5  SQL_VARTANT

      SQL_VARIANT数据类型用于同时存储各种数据类型,如数值、字符串已经日期值等。只有TIMESTAMP类型值不能存储。SQL_VARIANT列中的每个值都有两个部分:日期值和描述值的信息。这些信息包含数据类型的所有属性,如长度、范围和精确度。

      4.6  TABLE

      4.7  XML

      4.8  Spatial

      4.9  HIERARCHYID

      UNIQUEIDENTIFIER数据类型用于保存整个层面,它是作为CLR自定义数据安装的,包括一些层级节点上的创建和操作的系统函数:GetAncestor(),GetDescendant(),Read()和Wriite().

      4.10 TIMESTAMP

      TIMESTAMP数据类型指定其中的一栏为VARBINARY(8)和BINARY(8),这是由列中的无效值决定的。系统包含每个数据库的当前值(不是日期或时间),这样在插入或更新含有TIMESTAMP列这样的行就会自动增加。

      4.11 自定义数据类型

 

      5 附带有VARDECIMAL的DECIMAL存储类型

      Vardecimal 是一种存储格式,而不是数据类型。

      vardecimal 存储格式可以大大减少数据的存储大小,但确实增加了少量 CPU 开销。vardecimal 存储格式应用于表级别。也就是说,不能只将表中的某些 decimal 列存储为 vardecimal 存储格式而不将其他列存储为该格式。decimal 数据将保持为本身的数据类型。