SQL Server 2019中的資料型別總結

2021-10-17 11:43:34 字數 4030 閱讀 4633

sql server表中的每乙個欄位都只能包含乙個預先指定的特定資料型別,例如字元或數字。這個宣告叫做資料型別。在這篇文章裡,我們將比較和對照sql server 2008的各種資料型別。

此外,我們還將展示各種特定環境下哪種資料型別是最好的解決方法。在sql server 2008中有超過35種的不同資料型別。

分類  microsoft將各種資料型別分為以下7種大的分類:精確數字、大約數字、日期和時間、字串、unicode字串、二進位制字串和其它資料型別。

數字有兩種數字分類:精確數字和大約數字。

精確數字包括real和float型別。在一般情況下,當需要科學符號時使用精確數字。科學符號是一種使用10的冪數來描述非常大或非常小的數字的方法(也稱作指數符號)。

精確數字包括decimals(小數)、integers(整數)和money amounts(貨幣值)。

乙個integer是乙個沒有小數或分數的計算數值。所有的負數、正數和零都是整數。sql server將整數分為四個部分:

bigint:從-9,223,372,036,854,775,808到9,223,372,036,854,775,807

int:從-2,147,483,648到2,147,483,648

smallint:從-32,768到32,767

tinyint: 從0到255

正確地設定大小為int型別而不是將所有都設定為bigint是有兩個主要的原因的。首先是物理磁碟空間。對於bigint來說每條記錄佔據8個位元組,而int只使用兩個位元組。

另乙個原因是確保你的應用程式只接收到它所預期的資料大小,從而避免了出現緩衝溢位的現象。

具有小數的精確數字包括decimal、numeric、money和smallmoney資料型別。decimal和numeric型別功能上是一樣的。就是說,它們的使用、計算和行為都是一樣的,唯一的不同就是在數學定義上而不是sql server使用它們的方法上。

大多數sql server應用程式使用decimal。乙個decimal的長度最多可以達到38位。當定義了decimal,它的總長度和右側的小數點部分的最大長度也就被配置了。

定義的位數越多,每條記錄上使用的物理磁碟空間就越多。

money和smallmoney是小數點後固定的有四位的小數。smallmoney的值可以從- 214,748.3648到214,748.

3647,而money值的範圍是從-922,337,203,685,477.5808到922,337,203,685,477.5807。

使用money而不是乙個decimal的乙個原因是可以選擇在三位數後顯示美元符號和逗號。

字串這一節將開始討論字串:char、varchar和text。乙個char(字元)資料型別可以儲存字母、數字和鍵盤字元。

當定義了乙個char時,它的最大長度(可以達到8,000)就也固定了。想想乙個char可以將你能輸入到記事本中的所有東西儲存住——而且就像記事本,如果你輸入數字到乙個char欄位,那麼不能對它們執行數學操作。它們會被看做是文字字元,而不是數字。

一般情況下,當輸入每一條記錄的字元數目都大致相同時,例如乙個郵編貨**號碼,這時就使用char欄位。如果資料的長度是每條記錄都很不一樣時,例如乙個郵件位址,那麼使用varchar。乙個varchar是乙個長度可變的char(var)。

當建立了乙個varchar時,它的最大長度就也被定義了。使用varchar而不是char的乙個主要原因是各自使用的物理磁碟空間的數量。在下面的例子裡,建立了乙個具有乙個char欄位和乙個varchar欄位的表。

它們都設定為大小最大為50.

圖1給每乙個輸入相同的測試資料。

圖2下面的tsql返回物理磁碟上的位元組空間數目,按行和列的形式。

select datalength(colchar) as charsize, datalength(colvarchar) as varsize

from table1

圖3所以無論輸入的資料是大是小,對於每一條記錄char欄位都使用50個位元組。

varchar的另乙個好處是可以指定不限制大小的能力。這是通過使用「max」關鍵字來完成的,如同在varchar(max)中一樣。max意味著大小可以超過8,節。

此外,這個大小是不限制的。

最後乙個字串型別的是text資料型別。text和varchar(max)字段類似。它目前包括在sql server 2008之中只用於向後相容,在未來某個時候它將被廢棄。

unicode

unicode是乙個標準的方法,它允許應用程式記錄其它語言的字元而不僅僅是我們自己的。當你建立多語言應用程式或全球web**時,unicode就很方便了。char和varchar資料型別都可以配置為允許unicode,只要在它們之前加個字母「n」,如同nchar和nvarchar。

這個靈活性的代價在於增大了磁碟空間的使用。大略估計,unicode所需的磁碟空間大概是兩倍。

二進位制字串

二進位制字串是用於儲存非字元的資料,例如**或**檔案。有兩種資料型別用於此:binary和varbinary。

它們的配置就像char和varchar。varbinary(max)可以用來儲存不限制大小的檔案。還有乙個遺留資料型別叫做image,但是它在sql server的未來版本中將不再出現。

其它資料型別

有7個其它的資料型別,包括cursor、hierachyid、sql variant、table、timestamp、uniqueidentifier和xml。資料型別timestamp被rowversion取代了。uniqueidentifier是乙個獨特的guid。

當你不知道要用什麼資料型別時可以使用sql variant資料型別。它儲存任何東西都是8,000個位元組。如果你使用xml,那麼使用xml資料型別而不要使用乙個varchar。

xml型別允許繫結到集合上。

日期和時間

sql server 2008包含新的日期和時間資料型別。

總結在sql server 2008中有超過35種的不同資料型別。如果你的應用程式需要比較或管理不同資料型別的字段,那麼可以使用cast和convert函式。例如乙個包含數字的char欄位可以轉換為乙個int,然後就可以對它進行數學操作了。

字段型別描述

bit 0或1的整型數字

int 從-2^31(-2,147,483,648)到2^31(2,147,483,647)的整型數字

smallint 從-2^15(-32,768)到2^15(32,767)的整型數字

tinyint 從0到255的整型數字

decimal 從-10^38到10^38-1的定精度與有效位數的數字

numeric decimal的同義詞

money 從-2^63(-922,337,203,685,477.5808)到2^63-1(922,337,203,685,477.5807)的貨幣資料,最小貨幣單位千分之十

smallmoney 從-214,748.3648到214,748.3647的貨幣資料,最小貨幣單位千分之十

float 從-1.79e+308到1.79e+308可變精度的數字

real 從-3.04e+38到3.04e+38可變精度的數字

datetime 從2023年1月1日到2023年12日31的日期和時間資料,最小時間單位為百分之三秒或3.33毫秒

smalldatetime 從2023年1月1日到2023年6月6日的日期和時間資料,最小時間單位為分鐘

timestamp 時間戳,乙個資料庫寬度的唯一數字

uniqueidentifier 全球唯一識別符號guid

char 定長非unicode的字元型資料,最大長度為8000

varchar 變長非unicode的字元型資料,最大長度為8000

text 變長非unicode的字元型資料,最大長度為2^31-1(2g)

nchar 定長unicode的字元型資料,最大長度為8000

nvarchar 變長unicode的字元型資料,最大長度為8000

ntext 變長unicode的字元型資料,最大長度為2^31-1(2g)

binary 定長二進位制資料,最大長度為8000

varbinary 變長二進位制資料,最大長度為8000

image 變長二進位制資料,最大長度為2^31-1(2g)

SQL Server 2019備份恢復總結

一 資料庫儲存概述 1 資料檔案型別 primary data files 每個資料庫都有乙個單獨的主要資料檔案,預設以.mdf副檔名。主要資料檔案不僅包含資料資訊,還包含與該資料庫結構相關的資訊。建立資料庫時,資料庫結構相關資訊不僅存在於master資料庫中,同時還包含在primary data ...

SQL Server 2019高可用性解決方案優劣分析

在sql server 2008資料庫中,本身就帶有不少的高可用性解決方案。如可以採用故障轉移群集 資料庫映象 日誌傳送或者複製等手段來提高資料庫的高可用性。由於解決方案多了,資料庫管理員不得不掌握各個解決方案的優點與缺陷,然後根據企業的實際應用來選擇合適的解決方案。其實,這不僅僅是在考驗解決方案的...

SQL Server 2019連線字串寫法大全

一 net framework data provider for sql server 型別 net framework類庫 使用 system.data.sqlclient.sqlconnection 廠商 microsoft 標準安全連線 data source myserveraddress...