無論免費空間還是電商大站,合理設計表結構、充分利用存儲空間都是基本功。本文系統梳理 MySQL 常用數據類型特性與選型原則,並貫穿「夠用且最小」的建庫哲學。
以字符串形式存儲,每位 (含小數點) 佔 1 字節,空間佔用大。但小數位固定、運算不失真,完美適配「價格」「金額」等精度敏感場景。建議: 金額字段務必用 DECIMAL(10,2) 等顯式定義精度。
FLOAT (4 字節) 單精度,最小約 1.17E-38DOUBLE (8 字節) 雙精度,最小約 2.22E-308優勢在極小數值表達,民用業務極少用到。建議: 非科學計算場景慎用,避免精度陷阱。
| 類型 | 存儲 | 無符號最大值 | 典型適用場景 |
|---|---|---|---|
| TINYINT | 1B | 255 | 年齡、狀態碼、小範圍枚舉 |
| SMALLINT | 2B | 65,535 | 遊戲技能值、中等計數器 |
| MEDIUMINT | 3B | 16,777,215 | 千萬級自增主鍵首選,比 INT 省 1B/行 |
| INT | 4B | 4,294,967,295 | 通用自增 ID、大計數器 |
| BIGINT | 8B | 1.84E19 | 極大數據量主鍵、分布式 ID |
實戰算賬: 1600 萬行表用 MEDIUMINT 替代 INT 節省 ~16MB 空間,索引也更緊湊,緩存命中率提升。
DATE (3B) - 僅日期TIME (3B) - 僅時間DATETIME (8B) - 日期時間,範圍 1000-9999 年TIMESTAMP (4B) - 1970-2038 年,自動時區轉換YEAR (1B) - 年份原則: 業務只需日期用 DATE,需時區感知用 TIMESTAMP,通用用 DATETIME。
CHAR(N) 固定長,不足補空格,實際長度恆為 N。VARCHAR(N) 變長,實際佔用 = 內容長度 + 1 字節長度前綴。決策矩陣:
CHARVARCHARTEXT 家族 (TINYTEXT/TEXT/MEDIUMTEXT/LONGTEXT),額外 1-4 字節長度前綴案例: 股票代碼上海 6 位、深圳 4 位,若用 VARCHAR(6) 深圳股佔 5B、上海股佔 7B (含前綴),上海股更多時 CHAR(6) 更省空間。
ENUM('v1','v2',...) 最多 65535 值,單選,1-2 字節。性別、狀態機完美替代 TINYINT,直接存『帥哥/美眉』可讀性強。SET('v1','v2',...) 最多 64 成員,多選,1-8 字節。適合標籤、權限掩碼場景。數據類型選型是架構設計的微觀基石,精打細算在此,卓見成效在彼。