目錄
一、數值型數據
二、日期與時間數據
三、字符串與文本數據
四、布爾值與狀態碼
五、二進制與文件數據
六、唯一標識符(GUID)
七、枚舉與代碼表設計
八、存儲優化小結
九、總結
在數據庫設計中,字段類型(數據類型)的選擇至關重要。合理的數據類型不僅能提升查詢性能,還能節省存儲空間、減少數據異常。本文將以 SQL Server 為例,系統梳理常見數據類型及其應用場景,幫助你設計高質量數據庫。
一、數值型數據
需求 | 推薦類型 | 說明 |
---|---|---|
整數(范圍小,如狀態碼、性別) | TINYINT | 1字節,范圍0~255 |
整數(一般性,如ID、自增主鍵) | INT | 4字節,范圍 -2,147,483,648 ~ 2,147,483,647 |
超大整數(特殊場景) | BIGINT | 8字節,范圍非常大 |
小數(精確到小數點后4位以內) | DECIMAL(p, s) / NUMERIC(p, s) | p = 總位數,s = 小數位數,金融數據推薦 |
小數(對精度要求不高,如測量值) | FLOAT / REAL | 浮點數,有精度誤差 |
最佳實踐:
金融金額/匯率 → DECIMAL(18,2)
體重/溫度等測量值 → FLOAT
二、日期與時間數據
需求 | 推薦類型 | 說明 |
僅存儲日期(年月日) | DATE | 只包含年月日,無時間 |
存儲日期與時間(到秒) | DATETIME | 最常用日期時間類型,精度到0.003秒 |
存儲日期與時間(到毫秒/更高精度) | DATETIME2 | 替代DATETIME,精度更高 |
僅存儲時間(不含日期) | TIME | 只存儲時分秒 |
僅存儲年份+月份 | CHAR(7) / DATE(存01日) | 推薦用CHAR(7)存'YYYY-MM' |
最佳實踐:
日志時間戳 → DATETIME2(3)
報表月份字段 → CHAR(7)
三、字符串與文本數據
需求 | 推薦類型 | 說明 |
固定長度短字符串(如手機號) | CHAR(n) | 長度固定,查詢性能好 |
可變長度短字符串(如用戶名、地址) | VARCHAR(n) | 變長節省空間 |
可變長度長文本(如備注、簡介) | VARCHAR(MAX) | 可存儲2GB,慎用,盡量避免過大文本 |
Unicode字符(需存中文、表情等) | NCHAR(n) / NVARCHAR(n) | 字符集為Unicode,存儲中文必用 |
最佳實踐:
手機號 → CHAR(11)
用戶名 → NVARCHAR(50)
備注 → NVARCHAR(255)
四、布爾值與狀態碼
需求 | 推薦類型 | 說明 |
真/假(二元狀態) | BIT | 0/1布爾值,占用1位 |
狀態碼(有枚舉值,如1=啟用,2=禁用) | TINYINT / SMALLINT | 枚舉型狀態字段 |
注意:SQL Server 無專門的 BOOLEAN 類型,用 BIT 替代。
五、二進制與文件數據
需求 | 推薦類型 | 說明 |
存儲小圖片、文件(<8KB) | VARBINARY(n) | 指定字節長度 |
存儲大文件(圖片、PDF、文檔等) | VARBINARY(MAX) | 最多2GB文件,通常不推薦存大文件于數據庫 |
最佳實踐:文件/圖片存儲路徑放數據庫,文件本身存OSS/文件服務器。
六、唯一標識符(GUID)
需求 | 推薦類型 | 說明 |
全局唯一主鍵標識 | UNIQUEIDENTIFIER | 16字節GUID,適用于分布式主鍵 |
注意:GUID雖然唯一,但主鍵性能差,慎用作主鍵。
七、枚舉與代碼表設計
-
枚舉(如性別、狀態碼)通常用 TINYINT 存儲,定義與業務代碼一致。
-
復雜枚舉(帶名稱與描述) → 設計代碼表(Code Table),用 ID 關聯。
八、存儲優化小結
數據類型 | 選型建議 |
能用 TINYINT 不用 INT | 節省空間 |
固定長度用 CHAR,變長用 VARCHAR | 頻繁查詢字段用 CHAR 性能更優 |
存中文必須用 NCHAR/NVARCHAR | 中文字符存儲翻倍空間 |
文件與圖片不推薦存數據庫 | 存路徑/URL即可 |
時間戳用 DATETIME2 替代 DATETIME | 精度高,存儲空間更小 |
九、總結
SQL Server 數據庫字段設計時,“數據類型”與“字段長度”影響著性能、存儲與數據質量。字段類型選型的核心原則是:盡量精確匹配業務需求,避免過度設計與浪費空間,同時兼顧查詢性能與后續擴展性。