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

MySQL 資料型別深度解析與資料庫設計選型策略

     編輯:MySQL 綜合教學

合理選擇資料型別是資料庫效能、儲存空間與資料正確性的基石。本文系統分析 MySQL 數值、日期時間、字串、枚舉/集合四大類型特性,並給出選型建議與設計策略。

一、數值型別

1. 整數族 (精確、效能最佳)

型別儲存無符號範圍適用場景
TINYINT1 Byte0~255布林旗標、年齡、狀態碼、極小計數
SMALLINT2 Bytes0~65,535中小計數、年份、郵遞區號
MEDIUMINT3 Bytes0~16,777,215中等流水號、自增 ID (千萬級以下)
INT / INTEGER4 Bytes0~4,294,967,295通用自增 ID、大計數、外鍵
BIGINT8 Bytes0~1.84e19極大流水號、分散式 ID、時間戳毫秒

策略:選「夠用且最小」的型別。千萬列表用 MEDIUMINT 代替 INT 可省 25% 空間 (3 vs 4 Bytes)。一律加 UNSIGNED 避免負值並擴大正向範圍。

2. 定點數 (精確貨幣計算)

  • DECIMAL(p,s) / NUMERIC(p,s):以字串形式儲存每位數字,不會浮點誤差。
  • 儲存開銷:約 p+2 位元組。
  • 必用場景:價格、金額、費率、庫存單價 — 任何涉及金錢、需精確加減乘除的欄位。

3. 浮點數 (科學計算、近似值)

型別精度範圍儲存
FLOAT~7 位有效數字±1.17e-38 ~ ±3.4e384 Bytes
DOUBLE~15 位有效數字±2.22e-308 ~ ±1.8e3088 Bytes

策略:僅用於物理量測、科學計算、經緯度等可容許微小誤差的場景。嚴禁用於金額。

二、日期時間型別

型別儲存範圍適用
DATE3 Bytes1000-01-01 ~ 9999-12-31生日、入職日、訂單日期 (無需時間)
TIME3 Bytes-838:59:59 ~ 838:59:59每日固定時段、耗時長度
DATETIME8 Bytes1000-01-01 00:00:00 ~ 9999-12-31 23:59:59通用時間戳、建立/更新時間
TIMESTAMP4 Bytes1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC自動更新欄位 (DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP)、跨時區應用
YEAR1 Byte1901 ~ 2155年份選單

策略:TIMESTAMP 會自動轉換時區 (儲存 UTC,讀取依 time_zone),DATETIME 不轉換。跨時區系統優先用 TIMESTAMP 或統一應用層處理 UTC。

三、字串型別

型別長度特性儲存開銷適用
CHAR(n)固定長度n Bytes定長代碼 (ISO 國別碼、身分證字號、MD5 雜湊)
VARCHAR(n)可變長度實際長度 + 1~2 Bytes不定長文字 (姓名、標題、描述、Email)
TINYTEXT≤255 BytesL + 1極短文本
TEXT≤64 KBL + 2文章內容、日誌、JSON 文檔
MEDIUMTEXT≤16 MBL + 3長文本
LONGTEXT≤4 GBL + 4超大文本

關鍵判斷:若欄位值長度幾乎固定 (如 MD5 固定 32 字元、手機號 11 位),用 CHAR 省去長度前綴;否則用 VARCHAR。VARCHAR(255) 在 utf8mb4 下單列上限約 255×4+2=1022 Bytes,接近 InnoDB 行大小限制,大文本請改用 TEXT 家族。

四、枚舉與集合 (ENUM / SET)

  • ENUM:單選,最多 65,535 個元素,儲存 1~2 Bytes。極佳替代方案:性別 ENUM('M','F')、狀態 ENUM('active','inactive','pending')。比 TINYINT 更具可讀性,效能相同。
  • SET:多選,最多 64 個元素,儲存 1~8 Bytes (位元遮罩)。適用標籤、權限位元組合。

注意:ENUM/SET 元素修改需 ALTER TABLE (鎖表),頻繁變動的選項建議改用查閱表 (Lookup Table) + 外鍵。

五、資料庫設計選型策略總結

  1. 整數優先:能用整數 (含 ENUM) 解決的,不用字串、浮點、定點。
  2. 最小足夠原則:TINYINT > SMALLINT > MEDIUMINT > INT > BIGINT,CHAR > VARCHAR > TEXT。
  3. 金額必用 DECIMAL:DECIMAL(10,2) 或 DECIMAL(12,4) 視精度需求。
  4. 時間戳統一:DATETIME (應用層寫入 UTC) 或 TIMESTAMP (自動 UTC 轉換),二選一全專案一致。
  5. 避免 SELECT *:明確列出欄位,減少網路傳輸、利用覆蓋索引。
  6. 命名規範:小寫 + 底線 (created_at),避開保留字,意圖清晰。

小結

資料型別選型直接影響儲存成本、索引效率、查詢速度與資料正確性。掌握各型別的儲存機制、範圍與適用邊界,並在設計評審階段嚴格把關,是高效能 MySQL 架構的基礎功夫。

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