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

MySQL 數據類型與字段屬性完全手冊:選型原理與避坑指南

     編輯:MySQL 綜合教學

MySQL 數據類型與字段屬性完全手冊:選型原理與避坑指南

合理的數據類型選型是資料庫性能優化的基石,影響存儲空間、查詢速度、索引效率及應用邏輯正確性。本文系統梳理 MySQL 所有數據類型特性、存儲開銷、選型原則及常見陷阱。

一、日期時間類型

類型存儲字節範圍格式示例適用場景
DATE31000-01-01 ~ 9999-12-312024-01-15生日、入職日期等純日期
TIME3-838:59:59 ~ 838:59:5914:30:00時間段、工時記錄
DATETIME81000-01-01 00:00:00 ~ 9999-12-31 23:59:592024-01-15 14:30:00業務時間、創建/更新時間
TIMESTAMP41970-01-01 00:00:01 ~ 2038-01-19 03:14:072024-01-15 14:30:00自動記錄修改時間、跨時區應用
YEAR11901 ~ 21552024年份存儲

關鍵差異:TIMESTAMP 存儲 UTC,讀取時按會話時區轉換;DATETIME 存儲原始值,不做時區轉換。2038 年問題限制 TIMESTAMP 長期使用。

二、數值類型

1. 整數類型

類型字節有符號範圍無符號範圍典型用途
TINYINT1-128 ~ 1270 ~ 255布爾值、狀態碼、小枚舉
SMALLINT2-32,768 ~ 32,7670 ~ 65,535年齡、小範圍計數
MEDIUMINT3-8,388,608 ~ 8,388,6070 ~ 16,777,215中等範圍 ID、計數
INT4-2,147,483,648 ~ 2,147,483,6470 ~ 4,294,967,295主鍵 ID、通用計數器
BIGINT8-9.22E18 ~ 9.22E180 ~ 1.84E19大數據量主鍵、高精度計算

選型原則:夠用就好,越小越好。無符號可擴大正數範圍,但應用層需處理邊界。

2. 浮點/定點類型

類型字節精度存儲方式適用場景
FLOAT(M,D)4單精度 ~7 位有效數字二進制近似值科學計算、非精確測量值
DOUBLE(M,D)8雙精度 ~15 位有效數字二進制近似值高精度科學計算
DECIMAL(M,D)M+2精確到 D 位小數字符串存儲每位數字金額、價格、精確計算

陷阱實驗:FLOAT(5,3) 插入 123.45678 實際存儲 99.999(超出範圍截斷)。金融、價格類絕對禁止使用 FLOAT/DOUBLE。

三、字符串類型

類型長度特性最大長度存儲開銷適用場景
CHAR(N)固定長度255 字符N 字符空間定長代碼、MD5、UUID、國家代碼
VARCHAR(N)可變長度65,535 字符實際長度 + 1-2 字節通用變長字符串
TINYTEXT可變長度255 字符實際長度 + 1 字節極短文本
TEXT可變長度65,535 字符實際長度 + 2 字節文章、描述類文本
MEDIUMTEXT可變長度16,777,215 字符實際長度 + 3 字節長文本
LONGTEXT可變長度4,294,967,295 字符實際長度 + 4 字節超長文本、日誌

關鍵差異點

  1. CHAR 尾部空格會被截斷,VARCHAR/TEXT 保留
  2. VARCHAR 需 1-2 字節記錄長度,TEXT 固定 2 字節
  3. CHAR/VARCHAR 可建立完整索引,TEXT 僅支持前綴索引
  4. UTF8MB4 下:CHAR(100) 佔 400 字節,VARCHAR(100) 實際佔用按內容

四、枚舉與集合類型

類型成員上限存儲特性適用場景
ENUM65,5351-2 字節單選、內部存儲為整數索引狀態機、性別、固定分類
SET641-8 字節多選、位掩碼存儲權限標籤、多屬性標記

注意:ENUM 成員順序即排序順序,修改成員需 ALTER TABLE 重建表。

五、核心字段屬性詳解

屬性作用關鍵限制典型用法
AUTO_INCREMENT自增主鍵唯一、整數類型、通常為主鍵id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY
BINARY區分大小寫比較僅 CHAR/VARCHARcode VARCHAR(20) BINARY
DEFAULT默認值常量值、不可用函數/表達式status TINYINT DEFAULT 1
INDEX/KEY普通索引支持前綴長度INDEX idx_name (name(10))
NOT NULL禁止 NULL插入必須提供值業務必填字段
NULL允許 NULL默認屬性可選字段
PRIMARY KEY主鍵約束唯一、非空、單表僅一個PRIMARY KEY (id)
UNIQUE唯一約束允許多個 NULLemail VARCHAR(100) UNIQUE
ZEROFILL零填充顯示自動添加 UNSIGNEDorder_id INT ZEROFILL 顯示 0000000001

六、主鍵設計最佳實踐

  1. 單列主鍵:業務無關代理鍵(如自增 ID),不可變更
  2. 聯合主鍵:多列組合唯一,順序遵循最左前綴原則
  3. 避免:UUID、長字符串、業務含義字段作主鍵
  4. InnoDB 特有:主鍵即聚簇索引,二級索引葉子節點存主鍵值,主鍵越小二級索引越緊湊

七、修改字段類型操作指南

-- 安全修改:兼容現有數據
ALTER TABLE tbl MODIFY col NEW_TYPE;

-- 風險操作:數據可能截斷/轉換失敗
ALTER TABLE tbl MODIFY col VARCHAR(10) NOT NULL;

原則:擴大類型安全,縮小類型需驗證數據兼容性;生產環境大表使用 pt-online-schema-change。

八、選型決策速查表

  • 金額/價格 → DECIMAL(10,2) 或 BIGINT 存分
  • 手機號 → CHAR(11) 或 BIGINT
  • 身份證 → CHAR(18)
  • 郵箱 → VARCHAR(100)
  • 文章內容 → TEXT / LONGTEXT
  • 狀態枚舉 → TINYINT + 應用層常量 或 ENUM
  • 標籤集合 → SET 或 關聯表(推薦)
  • 創建時間 → DATETIME 默認 CURRENT_TIMESTAMP
  • 更新時間 → DATETIME 默認 CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

數據類型選型看似基礎,實則影響深遠。遵循「最小足夠、業務對齊、性能優先」原則,結合具體存儲引擎特性,才能構建高效穩健的資料庫模型。

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