首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 欄位類型完整參考手冊:數值、日期時間、字串三大類型詳細解析

     編輯:MySQL 資料庫相關知識

前言:選對型別,事半功倍

欄位型別決定儲存空間、索引效能、查詢精度與應用層型別映射。MySQL 提供數值、日期時間、字串三大類型,本文為您梳理完整參考表與選型指南。

一、數值類型

類型儲存有號範圍無號範圍適用場景
TINYINT1B-128 ~ 1270 ~ 255布爾旗標、極小計數、枚舉值
SMALLINT2B-32,768 ~ 32,7670 ~ 65,535小範圍計數、年齡、狀態碼
MEDIUMINT3B-8,388,608 ~ 8,388,6070 ~ 16,777,215中等計數、RGB顏色值
INT / INTEGER4B-2,147,483,648 ~ 2,147,483,6470 ~ 4,294,967,295通用主鍵、計數器、外鍵
BIGINT8B-9.22e18 ~ 9.22e180 ~ 1.84e19巨大計數、時間戳毫秒、分散式ID
FLOAT(M,D)4B±1.17e-38 ~ ±3.40e38-單精度科學計算、不需精確金額
DOUBLE(M,D)8B±2.22e-308 ~ ±1.79e308-雙精度科學計算、座標經緯度
DECIMAL(M,D) / NUMERICM+2B精確定點數,最大65位數字-金額、價格、比率、任何需精確計算
BIT(M)~M/8B位域-位元組標誌、權限掩碼

關鍵修飾符

  • UNSIGNED:移除負號,正數範圍翻倍。
  • ZEROFILL:左補 0 至顯示寬度 M,隱含 UNSIGNED。
  • M:顯示寬度(不影響儲存範圍)。
  • D:小數位數(浮點/定點)。

⚠️ BIGINT 陷阱

MySQL 算術運算以有號 BIGINT 或 DOUBLE 進行。9223372036854775807 * 2 會溢位產生錯誤結果。涉及巨大整數運算請改用 DECIMAL 或應用層處理。

二、日期時間類型

類型儲存範圍顯示格式特性
DATE3B1000-01-01 ~ 9999-12-31YYYY-MM-DD純日期,生日、生效日
DATETIME8B1000-01-01 00:00:00 ~ 9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS無時區,應用層自管時區
TIMESTAMP4B1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTCYYYY-MM-DD HH:MM:SS帶時區,自動轉換,首欄預設 CURRENT_TIMESTAMP
TIME3B-838:59:59 ~ 838:59:59HH:MM:SS時間間隔、每日排程
YEAR(2|4)1B1901~2155 (4位) / 1970~2069 (2位)YYYY年份專用

TIMESTAMP vs DATETIME 選型

  • TIMESTAMP:跨時區應用、自動記錄建立/更新時間、範圍足夠(2038 年前)。
  • DATETIME:歷史/未來日期、無時區概念、需 2038 年後範圍、精確保存用戶輸入時間。

三、字串類型

類型最大長度儲存開銷特性
CHAR(M)255 字符M 字節 (固定)右補空格,讀取時去尾空格,適合定長代碼(MD5、UUID、國籍代碼)
VARCHAR(M)65,535 字符 (共享 64KB 行上限)L+1/2 字節 (可變)實際長度+1/2字節長度前綴,適合變長文本(名稱、描述、URL)
TINYTEXT255 字符L+1 字節不支援 DEFAULT,不支援索引前綴長度
TEXT65,535 字符L+2 字節同 TINYTEXT
MEDIUMTEXT16,777,215 字符L+3 字節大文本、文章內容
LONGTEXT4,294,967,295 字符L+4 字節超大文本、日誌、JSON 文檔
ENUM('v1','v2',...)65,535 個成員1-2 字節單選枚舉,內部存數字索引,極省空間
SET('v1','v2',...)64 個成員1-8 字節多選集合,位掩碼存儲
BLOB 系列 (TINY/BLOB/MEDIUM/LONG)對應 TEXT 長度對應 TEXT 開銷二進制數據(圖片、檔案、加密串),無字元集概念

CHAR vs VARCHAR 選型原則

  1. 長度固定或差異極小 → CHAR(如 MD5 32 字符、手機號 11 位)。
  2. 長度變化大 → VARCHAR 節省空間。
  3. MyISAM/MEMORY 引擎 + 固定長度行 → CHAR 效能更高(定位公式簡單)。
  4. InnoDB + 變長行 → VARCHAR 無額外效能懲罰,且節省空間減少 I/O。

二進制 vs 非二進制字串

  • BINARY 屬性 / BLOB 類型:按字節值比較/排序,區分大小寫,無字元集概念。
  • 非二進制 (CHAR/VARCHAR/TEXT):按字元集排序規則比較,通常不區分大小寫(依 collation)。
  • MySQL 4.1+ 支援欄位級字元集,建議統一 utf8mb4 + utf8mb4_unicode_ci。

四、選型決策樹(快速查閱)

  1. 是數字嗎?
    • 需精確計算(金額) → DECIMAL
    • 整數計數/ID → TINYINT/SMALLINT/INT/BIGINT(按範圍選最小)
    • 科學計算/近似值 → FLOAT/DOUBLE
  2. 是日期時間嗎?
    • 跨時區/自動時間戳 → TIMESTAMP
    • 純日期/歷史/未來/無時區 → DATE/DATETIME
  3. 是字串嗎?
    • 固定長度代碼 → CHAR
    • 變長文本 → VARCHAR
    • 大文本/日誌 → TEXT/LONGTEXT
    • 二進制檔案 → BLOB
    • 固定枚舉單選 → ENUM
    • 固定集合多選 → SET

結語

型別選擇無小事:用最小滿足業務的型別,是索引瘦身、I/O 減少、快取命中率提升的源頭優化。建議團隊建立「型別選型規範表」,Code Review 時必查,讓好習慣成為肌肉記憶。

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