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...