| 類型 | 範圍 | 儲存 | 適用場景 |
|---|---|---|---|
| bigint | -2^63 (-9,223,372,036,854,775,808) ~ 2^63-1 | 8 bytes | 超大識別碼、跨系統唯一值、時間戳毫秒數 |
| int | -2^31 (-2,147,483,648) ~ 2^31-1 (2,147,483,647) | 4 bytes | 標準整數、主鍵、外來鍵、計數器 |
| smallint | -2^15 (-32,768) ~ 2^15-1 (32,767) | 2 bytes | 小範圍狀態、年份、優先級 |
| tinyint | 0 ~ 255 | 1 byte | 布林替代、極小計數、狀態碼 (0=正常, 1=刪除...) |
bigint > int > smallint > tinyintSELECT 2147483647 / 2 AS Result1, 2147483649 / 2 AS Result2;
-- Result1: 1073741823 (int)
-- Result2: 1073741824.500000 (decimal(10,6) - 因為常數 > INT_MAX)
超過 INT_MAX 的整數常數會被視為 decimal,影響除法精度。
-- 非自動參數化:常數先轉 numeric(精度剛好)
SELECT CAST(1.0 / 7 AS FLOAT); -- 0.142857142857143
-- 自動參數化:常數先轉 numeric(10,0) → 截斷
-- 同樣查詢若被自動參數化,結果精度較低
DECLARE @i INT = 1234567890;
SELECT CAST(@i AS CHAR(5)); -- 結果: '*****' (5 個星號)
1 億列資料表:
「資料類型的選擇要根據實際情況而定,最好能滿足需求。不要殺雞用牛刀,因為對空間的浪費會很嚴重,效率也會受到一定的影響。」