MySQL表由一或多個欄位組成,每欄位有特定型別決定儲存與運算語意。型別分三大類:數值類、字串類、日期/時間類。本文系統解析各型別範圍、儲存空間、屬性與選型原則。
| 型別 | 儲存 | 有號範圍 | 無號範圍 |
|---|---|---|---|
TINYINT | 1B | -128~127 | 0~255 |
SMALLINT | 2B | -32768~32767 | 0~65535 |
MEDIUMINT | 3B | -8388608~8388607 | 0~16777215 |
INT | 4B | -2147483648~2147483647 | 0~4294967295 |
BIGINT | 8B | -9223372036854775808~9223372036854775807 | 0~18446744073709551615 |
INT(M)顯示寬度**不影響**儲存與範圍,UNSIGNED禁止負數。
| 型別 | 儲存 | 精度說明 |
|---|---|---|
FLOAT | 4B | 單精度,±1.17E-38 ~ ±3.40E+38 |
DOUBLE | 8B | 雙精度,±2.22E-308 ~ ±1.79E+308 |
DECIMAL(M,D) | M+2B | 字串儲存,**精確十進位**,無四捨五入誤差,適合財務 |
4.0.2+支援FLOAT/DOUBLE UNSIGNED(僅移除負號部分)。M顯示寬度,D小數位。DECIMAL預設M=10,D=0。CPU無法直接運算DECIMAL,效率較低。
ZEROFILL:不足顯示寬度左補0(隱含UNSIGNED)。AUTO_INCREMENT:整數型專用自增序列。NULL/NOT NULL、DEFAULT。| 型別 | 最大長度 | 儲存空間 | 備註 |
|---|---|---|---|
CHAR(M) | M bytes | M bytes | 固定長,右補空格 |
VARCHAR(M) | M bytes | L+1 bytes | 可變長,L=實際長度 |
TINYBLOB/TEXT | 255 bytes | L+1 | |
BLOB/TEXT | 64KB | L+2 | |
MEDIUMBLOB/TEXT | 16MB | L+3 | |
LONGBLOB/TEXT | 4GB | L+4 | |
ENUM | 65535成員 | 1-2B | 單值,內部以數值儲存 |
SET | 64成員 | 1-8B | 多值,位元遮罩儲存 |
BLOB、BINARY屬性CHAR/VARCHAR。按**byte值**比較/排序,**區分大小寫**,與字元集無關。TEXT、無BINARY屬性CHAR/VARCHAR。按**字元集排序規則**比較,**通常不區分大小寫**。CHAR(避免VARCHAR額外1 byte長度欄位)。VARCHAR節省空間。CHAR。CHAR<4例外不轉)。OPTIMIZE TABLE。max_allowed_packet與客戶端封包大小。ENUM:宣告順序編號從1開始。SET:成員對應bit位(第1個→bit0,第2個→bit1...),多值並存透過位元組合。| 型別 | 範圍 | 儲存 | 零值 |
|---|---|---|---|
DATE | 1000-01-01 ~ 9999-12-31 | 3B | 0000-00-00 |
TIME | -838:59:59 ~ 838:59:59 | 3B | 00:00:00 |
DATETIME | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 | 8B | 0000-00-00 00:00:00 |
TIMESTAMP | 1970-01-01 00:00:00 ~ 2037年 | 4B | 00000000000000 |
YEAR(4) | 1901~2155 | 1B | 0000 |
YEAR(2) | 1970~2069 | 1B | 00 |
NULL → 自動設為當前日期時間。TIMESTAMP欄自動設為當前時間。CREATE TABLE t (
create_ts TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
update_ts TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
注意:update_ts必須置於create_ts**之前**才會自動更新(舊版本行為),新版建議用DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP語法。
0是合法值。完整掌握三大類型別特性,能在建模階段做出最適合業務與效能的型別決策,避免後期昂貴的ALTER TABLE重構。