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

MySQL 數據類型全解析:從基礎定義到實戰測試

     編輯:MySQL 綜合教學

核心知識體系

1. 如何查閱官方手冊

MySQL 客戶端內建幫助系統,輸入 ? int 或 HELP float; 即可查看數據類型詳情,含範圍、存儲大小、語法等。

2. 建表語法規範

CREATE TABLE [IF NOT EXISTS] 表名 (
    列名 數據類型 [完整性約束],
    ...
);

3. 插入數據語法

INSERT [INTO] 表名 [(列名...)] VALUES (值...);

4. 數據類型分類總覽

大類類型存儲/範圍備註
數值型TINYINT1 字節,-128~127 / 0~255極小整數
SMALLINT2 字節,-32768~32767小整數
MEDIUMINT3 字節中等整數
INT4 字節,-2147483648~2147483647標準整數
BIGINT8 字節大整數
浮點/定點FLOAT(M,D)4 字節,單精度,約 7 位有效數字M=總位數,D=小數位
DOUBLE(M,D)8 字節,雙精度,約 15 位有效數字
DECIMAL(M,D)字符串存儲,M+2 字節精確計算,金融首選
字符串CHAR(M)定長,0~255 字符,右側填充空格檢索時去除尾部空格
VARCHAR(M)變長,0~65535 字符,實際長度+1~2 字節不填充空格,保留尾部空格
TINYTEXT/TEXT/MEDIUMTEXT/LONGTEXT大文本,長度+1~4 字節不建議頻繁查詢的大字段
ENUM最多 65535 個枚舉值,存儲索引單選,如性別
SET最多 64 個成員,存儲位圖多選,如權限標籤
日期時間DATE3 字節,1000-01-01 ~ 9999-12-31僅日期
TIME3 字節,-838:59:59 ~ 838:59:59時間間隔或一天內時間
DATETIME8 字節,1000-01-01 00:00:00 ~ 9999-12-31 23:59:59日期時間組合,無時區
TIMESTAMP4 字節,1970-01-01 08:00:01 ~ 2038-01-19 11:14:07帶時區,自動更新
YEAR1 字節,1901~2155年份

實戰驗證實錄

1. 整型邊界測試

創建測試表 test1,包含 TINYINT 至 BIGINT 五列。插入最大值:

INSERT INTO test1 VALUES(127, 32767, 8388607, 2147483647, 231456789);

SMALLINT 超範圍 (65535) 直接報錯 Out of range value,修正後成功。MySQL 支持隱式類型轉換,字符串 '1' 可自動轉為數值 1;非數字字符串參與運算轉為 0 並產生警告。

2. 浮點數與定點數精度對比

建表 test2(FLOAT(6,2), DOUBLE(6,2), DECIMAL(6,2))。插入 23.34567 觀察四捨五入:三類型均四捨五入,但 DECIMAL 超範圍產生警告,FLOAT/DOUBLE 靜默截斷。驗證 12.5678 → 12.57,確認銀行級計算必須用 DECIMAL。

3. 日期時間類型多樣化輸入格式

  • TIME:支持 '13:14:24'、'101010' (10:10:10)、'3 10:10:10' (82:10:10)、數字 123546 (12:35:46)、NOW()/CURRENT_TIME。範圍 -838:59:59 ~ 838:59:59。
  • DATE:接受 '2014/12/13'、'2014@12@13'、數字 20151223、0 (0000-00-00)、NOW() (含時間部分會警告截取)。
  • DATETIME:需明確分隔符,如 '2014-08-31 13:23:56'、'2014@09@01 14-25-36'。
  • TIMESTAMP:顯示格式同 DATETIME,但範圍受限於 32 位有符號整數(2038 年問題)。
  • YEAR:兩位數規則 00~69→2000+, 70~99→1900+;數字 0→0000,字符串 '0'/'00'→2000。

4. 字符串類型深度對比

建表 teststring(CHAR(5), VARCHAR(5)),插入 'A' 觀察存儲。CHAR 右側填充空格,檢索自動去除;VARCHAR 保留原樣。中文插入需 SET NAMES GBK (或 utf8mb4) 確保客戶端編碼一致,否則亂碼。效率:CHAR > VARCHAR > TEXT,但 CHAR 浪費空間,長度超 255 或不定長必用 VARCHAR/TEXT。

5. ENUM 與 SET 實戰

ENUM('男','女','保密') 存儲索引 (1,2,3),插入數字或字符串均可。SET('A','B','C','D') 允許組合 'A,B,C',順序無關,插入非集合值報錯 Data truncated。適用於狀態標記、權限位圖場景。

最佳實踐建議

  1. 優先選擇 最小足夠 的類型:節省空間、提升緩存命中、加快查詢。
  2. 金額、精度敏感業務 強制 DECIMAL。
  3. 字符集統一使用 utf8mb4,避免 Emoji 截斷。
  4. 時間戳業務考慮 BIGINT 存儲毫秒級 Unix 時間,規避 2038 年問題並便於跨時區計算。
  5. 大文本拆表或用對象存儲,主表僅存引用。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved