首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 整數類型 int、bigint、smallint、tinyint 範圍與選用指南

     編輯:關於SqlServer

四大整數類型完整對照

類型範圍儲存適用場景
bigint-2^63 (-9,223,372,036,854,775,808) ~ 2^63-18 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小範圍狀態、年份、優先級
tinyint0 ~ 2551 byte布林替代、極小計數、狀態碼 (0=正常, 1=刪除...)

類型優先序與隱含轉換

  • 優先序:bigint > int > smallint > tinyint
  • 運算時低優先序自動提升至高優先序
  • 注意:SQL Server 不會 自動將 tinyint/smallint/int 提升為 bigint,除非運算元已是 bigint

常見陷阱與最佳實務

1. 常數溢位自動變 decimal

SELECT 2147483647 / 2 AS Result1, 2147483649 / 2 AS Result2;
-- Result1: 1073741823 (int)
-- Result2: 1073741824.500000 (decimal(10,6) - 因為常數 > INT_MAX)

超過 INT_MAX 的整數常數會被視為 decimal,影響除法精度。

2. 自動參數化影響精度

-- 非自動參數化:常數先轉 numeric(精度剛好)
SELECT CAST(1.0 / 7 AS FLOAT);  -- 0.142857142857143

-- 自動參數化:常數先轉 numeric(10,0) → 截斷
-- 同樣查詢若被自動參數化,結果精度較低

3. 整數轉字串溢位顯示 *

DECLARE @i INT = 1234567890;
SELECT CAST(@i AS CHAR(5));  -- 結果: '*****' (5 個星號)

選用決策樹

  1. 需儲存 > 21 億 → bigint
  2. 需儲存負數 或 > 32,767 → int
  3. 範圍 -32,768 ~ 32,767 → smallint
  4. 範圍 0 ~ 255 且無負數 → tinyint
  5. 不確定 → int (平衡空間/範圍/效能)

空間節省實例

1 億列資料表:

  • ID 用 BIGINT:800 MB
  • ID 用 INT:400 MB (節省 50%)
  • 狀態碼用 INT → TINYINT:節省 300 MB

「資料類型的選擇要根據實際情況而定,最好能滿足需求。不要殺雞用牛刀,因為對空間的浪費會很嚴重,效率也會受到一定的影響。」

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved