1. 數字類型(Numeric Types)
類型 |
型別 |
範圍 |
位元數 |
備註 |
精確數值 (整數) |
bit |
0、1、null |
1 byte |
字串值true和false可以轉換成bit值,即true會轉換成1;而false會轉換成0。 |
tinyint |
0~28-1 (0~255) |
1 byte |
|
|
smallint |
-215~215-1 (-32,768~32,767) |
2 bytes |
|
|
int (/integer) |
-231~231-1 (-2,147,483,648~2,147,483,647) |
4 bytes |
|
|
bigint |
-263~263-1 |
8 bytes |
|
|
精確數值 (小數) |
numeric[(p[,s])] |
-1038+1~1038-1 |
5~17 bytes |
|
decimal[(p[,s])] |
-1038+1~1038-1 |
5~17 bytes |
||
精確數值 (貨幣) |
money |
-263~263-1 小數4位 (-922,337,203,685,477.5808 到 922,337,203,685,477.5807) |
8 bytes |
|
smallmoney |
-231~231-1 小數4位 (-214748.3648~214748.3647) |
4 bytes |
|
|
近似數值 (小數) |
float[(n)] |
–3.40E38~–1.18E-38、0、1.18E-38~3.40E38 |
n:1~24 à4 byte n:25~53 à8 byte |
|
real |
–1.79E308~–2.23E-308、0、2.23E-308~1.79E308 |
4 bytes |
同於 float(24) |
※注意:
(1) 需要精確數值行為時請勿使用float和real這些資料類型,例如財務應用程式、牽涉到四捨五入的作業或者進行相等檢查作業時。
(2) 避免在 WHERE 子句的搜尋條件中使用 float 或 real 資料行,尤其是 = 與 <> 運算子。最好將 float 和 real 資料行限制為 > 或 < 比較。
2. 文字類型(Character Types)
類型 |
型別 |
範圍 |
位元數 |
備註 |
非Unicode |
char(size) |
固定長度1~8000字元,區分全半型 |
1字元 1 bytes |
例如:在char(5)之下,abc與abcde會以"abc空白空白"與"abcde”等方式儲存。 |
varchar(size) |
變動長度1~8000字元,區分全半型 |
1字元 1 bytes |
例如:在varchar(5)之下,abc與abcde會以"abc"與"abcde”等方式儲存。 |
|
varchar(max) |
1~231-1字元 |
0 ~ 2 GB |
|
|
Unicode |
nchar(size) |
固定長度1~4000字元,不區分全半型,為Unicode編碼 |
1字元 2 bytes |
|
nvarchar(size) |
變動長度1~4000字元,不區分全半型,為Unicode編碼 |
1字元 2 bytes |
|
|
nvarchar(max) |
1~231-1字元,為Unicode編碼 |
0 ~ 2 GB |
|
※注意:
(1) 在未來的Microsoft SQL Server版本中,將移除ntext、text和image等資料類型。請避免在新的開發工作中使用這些資料類型,並修改目前在使用這些資料類型的應用程式,建護改用nvarchar(max)、varchar(max)和varbinary(max)。
3. 日期和時間類型(Date and Time Types)
類型 |
型別 |
範圍 |
位元數 |
備註 |
日期和 |
datetime |
1753/01/01 00:00:00.000 到 9999/12/31 23:59:59.999 |
8 bytes |
例如: |
smalldatetime |
1900/01/01 00:00 到 2079/06/06 23:59 |
4 bytes |
例如: |
|
datetime2(size) |
0001/01/01 00:00:00.0000000 到 9999/12/31 23:59:59.9999999 |
6~8 bytes |
格式: |
|
date |
0001/01/01 ~ 9999/12/31 (精確度:1天) |
3 bytes |
格式:YYYY-MM-DD |
|
time(size) |
00:00:00.0000000 到23:59:59.9999999 |
3~5 bytes |
格式:HH:MI:SS.NNNNNNN |
|
datetimeoffset(size) |
0001/01/01 00:00:00.0000000 ~ 9999/12/31 23:59:59.9999999 |
8~10 bytes |
格式: |
4. 二進位資料類型(Binary Types)
類型 |
型別 |
範圍 |
位元數 |
備註 |
二進位 |
binary(size) |
固定長度1~8000 bytes |
固定長度 8000 bytes,不足自動補上 0x00 |
使用於「資料行資料項目的大小不一致」時。 |
varbinary(size) |
變動長度1~8000 bytes |
變動長度 |
使用於「資料行資料項目的大小變化相當大」時。 |
|
varbinary(max) |
1~231-1 bytes |
0 ~ 2 GB |
使用於「資料行資料項目超過8,000位元組」。 |
|
地理位置空間資料 |
geometry |
利用CLR實作資料類型,適用平面座標系統的資料 |
|
|
geography |
利用CLR實作資料類型,適用經緯度座標系統的資料 |
|
|
※注意:
(1) 在儲存如安全性識別碼(SID)、全域唯一識別碼(GUID)或可以儲存成十六進位縮寫的複數時,就可以使用「二進位資料」。
(2) 當資料定義或變數宣告陳述式中沒有指定size時,預設為1。當size不是利用CAST函數來指定時,預設為30。
5. 其他類型(Other Types)
型別 |
範圍 |
位元數 |
備註 |
xml |
xml資料 |
0 ~ 2 GB |
可以使用xml資料類型方法(如:query()、value()、exist()、modify()、nodes())來查詢儲存在xml類型之變數或資料行中的XML執行個體。 |
uniqueidentifier |
全域唯一識別碼(GUID) |
16 bytes |
|
timestamp |
資料庫內自動產生唯一的二進位值,用於指出資料庫中發生資料修改的「相對順序」。 |
8 bytes |
|
hierarchyid |
利用CLR實作資料類型,用於管理具有階層式結構的資料及資料表。 |
|
|
※注意:
(1) 請勿在「索引鍵」中使用timestamp資料行 (尤其是主索引鍵),因為每次修改資料列時,timestamp值就會變更。
(2) 若要記錄資料表中發生資料修改的時間,請使用datetime2或smalldatetime資料類型來記錄事件和觸發程序,以便在發生修改時,自動更新這些值。
(3) timestamp是 rowversion資料類型的同義字。在 DDL 陳述式中,請盡可能利用rowversion來取代timestamp。
(4) timestamp語法已被取代。未來的Microsoft SQL Server版本將移除這項功能。請避免在新的開發工作中使用這項功能,並修改目前使用這項功能的應用程式。
6. 參考資料
留言列表