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

MySQL 數據類型全景指南:選型原理、存儲空間與避坑實戰

     編輯:MySQL 綜合教學

MySQL 數據類型全景指南:選型原理、存儲空間與避坑實戰

合理選擇數據類型是表設計的基石,直接影響存儲空間、索引效率、查詢性能與數據正確性。本文按類別系統梳理 MySQL 所有數據類型的特點、適用場景與選型建議。

一、字符串類型

類型最大長度存儲特點適用場景
CHAR(n)255 字節定長,不足右補空格,讀取去除尾部空格固定長度:MD5、UUID、郵編、手機號(定長)
VARCHAR(n)65,535 字節 (共享 64KB)變長,1-2 字節存長度,按實際內存存儲不定長文本:姓名、地址、郵箱
TINYTEXT255 字節不需指定長度,離頁存儲極短文本
TEXT64 KB離頁存儲文章、描述
MEDIUMTEXT16 MB離頁存儲長文本
LONGTEXT4 GB離頁存儲超大文本

⚠️ CHAR vs VARCHAR:頻繁 UPDATE 定長列用 CHAR 避免碎片;可變長度優先 VARCHAR。VARCHAR(255) 在 utf8mb4 下佔 767 字節,超過則需遷移到 TEXT 或調整索引前綴長度。

二、整數類型 (按存儲空間選最小足夠類型)

類型字節有符號範圍無符號範圍
TINYINT1-128 ~ 1270 ~ 255
SMALLINT2-32,768 ~ 32,7670 ~ 65,535
MEDIUMINT3-8,388,608 ~ 8,388,6070 ~ 16,777,215
INT4-2,147,483,648 ~ 2,147,483,6470 ~ 4,294,967,295
BIGINT8-9.22e18 ~ 9.22e180 ~ 1.84e19

💡 手機號存儲:BIGINT (8B) 優於 CHAR(11) (utf8mb4 33B / latin1 11B),可用 CAST 轉換。

三、定點/浮點數

類型字節精度適用場景
DECIMAL(M,D)M+2 (約)精確金額、價格、利率 (字符串存儲,無精度損失)
FLOAT4~7 位有效數字科學計算、坐標、近似值
DOUBLE8~15 位有效數字高精度近似計算

💰 金融金額必用 DECIMAL,FLOAT/DOUBLE 存在二進制精度損失,如 0.1 + 0.2 != 0.3。

四、日期時間類型

類型字節範圍特點
DATE41000-01-01 ~ 9999-12-31純日期
TIME3-838:59:59 ~ 838:59:59純時間/時長
DATETIME81000-01-01 00:00:00 ~ 9999-12-31 23:59:59無時區,靜態時間點
TIMESTAMP41970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC帶時區自動轉換,受時區影響
YEAR11901 ~ 2155僅年份

🕐 選型建議:用戶操作時間用 DATETIME 保持原意;系統日志、創建/更新時間用 TIMESTAMP 自動維護時區;5.6+ 支持微秒精度 DATETIME(6)。

五、二進制大對象 (BLOB)

類型最大長度
TINYBLOB255 B
BLOB64 KB
MEDIUMBLOB16 MB
LONGBLOB4 GB

📁 最佳實踐:文件/圖片存對象存儲 (S3/OSS),數據庫只存 URL。BLOB 導致備份巨大、複製緩慢、緩存污染。

六、IP 地址存儲技巧

-- 存儲:INET_ATON('192.168.1.1') → 3232235777 (INT UNSIGNED)
-- 讀取:INET_NTOA(3232235777) → '192.168.1.1'
CREATE TABLE ip_log (ip INT UNSIGNED NOT NULL);
INSERT INTO ip_log VALUES (INET_ATON('192.168.1.1'));

只需 4 字節,支持范圍查詢 WHERE ip BETWEEN INET_ATON('192.168.1.0') AND INET_ATON('192.168.1.255')。

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