主要學習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 資料將保持為本身的資料類型。