MySQL 整型數據類型:選對數字類型,讓存儲效率翻倍
在 MySQL 中,整型(整數類型)是最常用的數據類型之一,從用戶 ID 到商品數量,幾乎所有涉及數字的場景都離不開它。但你知道嗎?選對整型類型不僅能節省存儲空間,還能提升查詢性能。今天就用最通俗的方式,帶你搞懂 MySQL 整型的核心知識。
一、5 種整型類型,一張表講清區別
MySQL 提供了 5 種基礎整型類型,核心區別在于占用字節數和表示范圍,直接決定了能存儲的數字大小:
類型 | 占用字節 | 有符號范圍(默認) | 無符號范圍(UNSIGNED) | 典型場景 |
---|---|---|---|---|
TINYINT | 1 字節 | -128 ~ 127 | 0 ~ 255 | 狀態值(0/1/2)、性別 |
SMALLINT | 2 字節 | -32768 ~ 32767 | 0 ~ 65535 | 小數量(如評論數) |
MEDIUMINT | 3 字節 | -8388608 ~ 8388607 | 0 ~ 16777215 | 中等規模 ID(如文章 ID) |
INT | 4 字節 | -2147483648 ~ 2147483647 | 0 ~ 4294967295 | 普通 ID(用戶 ID、訂單號) |
BIGINT | 8 字節 | -9e18 ~ 9e18 | 0 ~ 1.8e19 | 大數量(如海量數據 ID) |
二、核心用法:3 個必須掌握的知識點
1. 無符號(UNSIGNED):讓正數范圍翻倍
默認情況下,整型是 “有符號” 的(可存正負值),但如果確定數值不會為負(如 ID、數量),可加UNSIGNED關鍵字,讓正數范圍翻倍:
-- 無符號TINYINT,范圍0~255(比有符號的0~127多一倍)
CREATE TABLE products (stock TINYINT UNSIGNED -- 庫存不可能為負,用無符號更合理
);
2. 零填充(ZEROFILL):補零顯示,不影響存儲
加ZEROFILL會在查詢時用 0 補全到定義長度(僅影響顯示,不改變實際存儲值):
CREATE TABLE scores (rank INT(5) ZEROFILL -- 定義長度5,顯示時不足補0
);INSERT INTO scores (rank) VALUES (3); -- 存儲為3,查詢顯示"00003"
?? 注意:ZEROFILL會自動隱式添加UNSIGNED,不能存負數。
3. 自增(AUTO_INCREMENT):主鍵的最佳拍檔
整型 +AUTO_INCREMENT是生成唯一 ID 的經典組合,通常搭配PRIMARY KEY使用:
CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT, -- 自動生成1,2,3...name VARCHAR(50)
);-- 插入時無需指定id,會自動遞增
INSERT INTO users (name) VALUES ('張三'), ('李四');
💡 建議:自增主鍵優先用INT(足夠多數場景),超 40 億數據再用BIGINT。
三、選型原則:記住這 2 條,避免 90% 的坑
- 夠用就好,別貪大
比如存儲 “性別”(0 = 未知,1 = 男,2 = 女),用TINYINT(1 字節)足夠,沒必要用INT(4 字節),浪費 3 倍空間。
- 預留擴展,但別過度
比如預估用戶量最多 100 萬,INT(最大 42 億)完全夠用,沒必要一上來就用BIGINT(8 字節)。
四、常見誤區:別被 “顯示長度” 誤導
定義整型時可以加數字,比如INT(10),但這不是存儲范圍,只是 “顯示寬度”:
-
INT(3)和INT(10)存儲范圍完全一樣(都是 4 字節,-21 億~21 億)
-
僅當配合ZEROFILL時,才會影響顯示(如INT(3) ZEROFILL存 5 會顯示 “005”)
所以,別糾結INT(5)還是INT(10),根據范圍選INT/BIGINT等類型即可。
總結
MySQL 整型的核心是 “按范圍選類型”:小范圍用TINYINT/SMALLINT省空間,普通場景用INT,海量數據用BIGINT。記住:合適的類型 = 更少的存儲 + 更快的查詢,這就是整型優化的精髓。