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

MySQL 數據類型完整指南:從整數到日期時間的深度解析

     編輯:MySQL 資料庫相關知識

MySQL 數據類型完整指南

在設計資料庫結構時,選擇正確的數據類型對於效能、儲存空間與資料完整性至關重要。MySQL 提供了豐富的數據類型,大致可分為數值類型、字串類型、日期時間類型與複合類型。本文將系統性地整理各類型的特性、適用場景與常見誤區,助你做出最佳選擇。

一、數值類型

1. 整數類型

MySQL 支援五種標準整數類型,儲存範圍與佔用空間如下:

類型大小有符號範圍無符號範圍適用場景
TINYINT1 字節-128 ~ 1270 ~ 255極小整數(如布林值、狀態碼)
SMALLINT2 字節-32,768 ~ 32,7670 ~ 65,535小範圍整數
MEDIUMINT3 字節-8,388,608 ~ 8,388,6070 ~ 16,777,215中等範圍整數
INT / INTEGER4 字節-2,147,483,648 ~ 2,147,483,6470 ~ 4,294,967,295通用整數、主鍵 ID
BIGINT8 字節-9.22×10¹⁸ ~ 9.22×10¹⁸0 ~ 1.84×10¹⁹極大整數(如唯一標識符)

關鍵細節:

  • INT(m) 中的 m 僅影響查詢結果的顯示寬度(搭配 ZEROFILL 時填充 0),不限制實際儲存範圍。
  • 加上 UNSIGNED 可將最大值翻倍,適用於不需負數的場景(如自增 ID)。
  • ZEROFILL 會隱含添加 UNSIGNED,查詢時以 0 填充至指定寬度。

2. 浮點與定點數

類型大小精度語法特性
FLOAT4 字節單精度(約 7 位有效數字)FLOAT(m,d)近似值,適合科學計算
DOUBLE8 字節雙精度(約 15 位有效數字)DOUBLE(m,d)近似值,精度更高
DECIMAL視 M、D 而定精確值DECIMAL(m,d) M<65, D<30精確儲存,適合金融、價格

避坑指南: FLOAT(5,3) 插入 123.45678 會四捨五入為 123.457,但實際儲存位數仍以實際值為準。涉及金額、精確計算務必使用 DECIMAL。

二、字串類型

1. CHAR vs VARCHAR

特性CHAR(n)VARCHAR(n)
長度固定長度,0-255 字符變長,0-65,535 字符
儲存方式不足補空格,查詢時去除尾部空格實際長度 + 1/2 字節長度前綴
效能查詢速度較快(固定長度易定位)節省空間,適合不定長字符
尾部空格不保留保留

選擇建議: 長度固定(如 MD5、UUID、郵編)用 CHAR;長度不一(如姓名、地址)用 VARCHAR。

2. TEXT 與 BLOB 家族

類型最大長度用途
TINYTEXT / TINYBLOB255 字節極短文本/二進制
TEXT / BLOB65,535 字節常規長文本/二進制
MEDIUMTEXT / MEDIUMBLOB16,777,215 字節中等長度
LONGTEXT / LONGBLOB4,294,967,295 字節極大文本/二進制

核心差異:

  • BLOB:二進制儲存,區分大小寫,無字符集概念,整體讀取。
  • TEXT:文本儲存,不區分大小寫(依字符集排序規則),可指定字符集,支援前綴索引。
  • VARCHAR 可直接建索引;TEXT 建索引需指定前綴長度,且索引效果通常不如 VARCHAR。

三、日期時間類型

類型大小範圍格式適用場景
DATE3 字節1000-01-01 ~ 9999-12-31YYYY-MM-DD純日期(生日、入職日)
TIME3 字節-838:59:59 ~ 838:59:59HH:MM:SS時間段或一天內時間
YEAR1 字節1901 ~ 2155YYYY年份
DATETIME8 字節1000-01-01 00:00:00 ~ 9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS日期時間混合,無時區感知
TIMESTAMP4 字節1970-01-01 00:00:01 ~ 2038-01-19 03:14:07YYYYMMDDHHMMSS自動記錄修改時間,帶時區轉換

TIMESTAMP 獨特行為: 若未顯式賦值或賦 NULL,自動填充當前時間;記錄更新時亦自動刷新。適合「最後修改時間」欄位。注意 2038 年上限問題,長期項目建議用 DATETIME。

四、複合類型:ENUM 與 SET

  • ENUM:單選,最多 65,535 個元素。內部以數字索引(從 1 起)儲存,插入非法值會存空串(索引 0)。適用於性別、狀態等互斥枚舉。
  • SET:多選,最多 64 個元素。內部用位掩碼儲存,自動去重。適用於標籤、權限等多值場景。

五、屬性修飾符速查

關鍵字含義
NULL / NOT NULL是否允許空值
DEFAULT預設值
PRIMARY KEY主鍵
AUTO_INCREMENT自增(整數類型)
UNSIGNED無符號,擴大正數範圍
CHARACTER SET指定字符集
BINARY二進制比較(區分大小寫)

六、選型最佳實踐

  1. 「夠用就好」:優先選擇佔用空間最小、滿足業務範圍的類型。
  2. 金額用 DECIMAL:避免浮點誤差。
  3. 主鍵首選 INT/BIGINT + UNSIGNED + AUTO_INCREMENT:效能最佳,避免 UUID 造成的頁分裂。
  4. 字符集統一用 utf8mb4:支援 Emoji,避免亂碼。
  5. 大文本/二進制考慮外部儲存:僅在資料庫存路徑,實際檔案放物件存儲或檔案系統。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved