SQL Server 將系統資料類型分為七大類:整數、浮點數、二進制、邏輯、字元、文字/圖形、日期時間。每個欄位、變數、參數、運算式皆有確定類型。
| 類型 | 範圍 | 儲存位元組 | 適用場景 |
|---|---|---|---|
BIGINT | -2^63 ~ 2^63-1 | 8 | 極大範圍 ID、科學計算、高併發序列 |
INT | -2^31 ~ 2^31-1 | 4 | 通用主鍵、計數器、外鍵 (預設首選) |
SMALLINT | -32,768 ~ 32,767 | 2 | 狀態碼、小範圍枚舉、節省空間 |
TINYINT | 0 ~ 255 | 1 | 布林替代、極小範圍計數、性別/狀態 |
選型原則:滿足業務範圍的前提下,選擇儲存空間最小的類型,可顯著降低 I/O、記憶體、索引體積。
| 類型 | 精度/範圍 | 位元組 | 備註 |
|---|---|---|---|
REAL | 7 位有效數字, ±3.40E±38 | 4 | 單精度浮點,近似值 |
FLOAT[(n)] | n=1~7 相當 REAL (4B); n=8~15 雙精度 (8B, 15 位) | 4/8 | 科學計算、物理量,近似值 |
DECIMAL(p,s)NUMERIC(p,s) | p=1~38 (總位數), s=0~p (小數位) | 5~17 | 精確數值,金融、貨幣、計量必選 |
關鍵差異:FLOAT/REAL 為二進制浮點,無法精確表示 0.1 等十進制小數;DECIMAL/NUMERIC 為十進制定點,**精確無誤差**,財務系統嚴禁使用前者。
SQL Server 預設最大精度 28 位,可啟動參數擴展至 38 位:
sqlservr /d "C:\MSSQL\Data\master.mdf" /p38
| 類型 | 長度 | 儲存 | 特性 |
|---|---|---|---|
BINARY(n) | 固定 n (1~8000) | n+4 位元組 | 輸入需 0x 前綴,不足右補 0x00,超長截斷 |
VARBINARY(n) | 變動 0~n | 實際長度+4 | 變長、允許 NULL 視為 VARBINARY,處理速度略慢於 BINARY |
應用:檔案雜湊、加密金鑰、小型二進制物件。
BIT:1 位元組,值 0/1/NULL。非 0 視為 1。**不可直接設為 NOT NULL** (需配合預設值或 CHECK)。| 類型 | 編碼 | 最大字元數 | 儲存 | 適用 |
|---|---|---|---|---|
CHAR(n) | 非 Unicode | 8000 | 固定 n 位元組 | 定長代碼 (ISO 國別碼、定長識別碼) |
VARCHAR(n) | 非 Unicode | 8000 | 實際長度+2 | 通用變長字串 (姓名、地址、描述) |
NCHAR(n) | Unicode (UTF-16) | 4000 | 固定 2n 位元組 | 定長多語言 (中日韓固定長代碼) |
NVARCHAR(n) | Unicode (UTF-16) | 4000 | 實際 2*長度+2 | 通用多語言、混合語系內容 |
MAX 指定符:VARCHAR(MAX)、NVARCHAR(MAX)、VARBINARY(MAX) 支援 2GB 資料,取代舊版 TEXT/NTEXT/IMAGE。
| 舊類型 | 替代類型 | 最大容量 | 備註 |
|---|---|---|---|
TEXT | VARCHAR(MAX) | 2^31-1 位元組 | 非 Unicode 長文本 |
NTEXT | NVARCHAR(MAX) | 2^30-1 位元組 | Unicode 長文本 |
IMAGE | VARBINARY(MAX) | 2^31-1 位元組 | 二進制大物件 (圖片、文件) |
**新開發嚴禁使用 TEXT/NTEXT/IMAGE**,遷移現有欄位至 MAX 類型可獲得更好效能與功能支援。
| 類型 | 範圍 | 精度 | 位元組 | 建議 |
|---|---|---|---|---|
DATETIME | 1753-01-01 ~ 9999-12-31 | 3.33 ms | 8 | 舊系統相容 |
DATETIME2(n) | 0001-01-01 ~ 9999-12-31 | 100 ns (n=7) | 6~8 | 首選,範圍更廣、精度更高 |
DATE | 0001-01-01 ~ 9999-12-31 | 天 | 3 | 僅需日期 |
TIME(n) | 00:00:00 ~ 23:59:59.9999999 | 100 ns | 3~5 | 僅需時間 |
DATETIMEOFFSET(n) | 含時區偏移 | 100 ns | 8~10 | 跨時區應用 |
SMALLDATETIME | 1900-01-01 ~ 2079-06-06 | 1 分鐘 | 4 | 極少用 |
TINYINT/SMALLINT/INT/BIGINT (由小到大試)DECIMAL(p,s)FLOAT/REALNVARCHAR (定長用 NCHAR)VARCHAR (定長用 CHAR)VARBINARY (定長用 BINARY)DATETIME2 / DATE / TIME / DATETIMEOFFSETVARCHAR(MAX) / NVARCHAR(MAX) / VARBINARY(MAX)精準選型 = 空間節省 + 效能提升 + 資料正確性。金融必用 DECIMAL,多語言必用 NVARCHAR,新專案棄用 TEXT/NTEXT/IMAGE,日期時間首選 DATETIME2 系列。