首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

淺談 MySQL int(m):預期寬度、ZEROFILL 行為與常見誤區

     編輯:MySQL 資料庫相關知識

前言

建表時習慣寫 INT(11)?這裡的 11 到底代表什麼?是限制長度、還是單純預期值?本文用實測數據一次講透。

一、核心概念:M 是「預期顯示寬度」

  • 不限制實際儲存的數值大小(仍受 INT 本身範圍約束)。
  • 不影響磁碟儲存空間(永遠 4 bytes)。
  • 僅在 搭配 ZEROFILL 時,查詢結果左補 0 至 M 位。

二、實測演示

CREATE TABLE test (num INT(5) ZEROFILL);
INSERT INTO test VALUES (1), (11), (123), (12345), (123456), (1234567);

查詢結果

+---------+
| num     |
+---------+
| 00001   |
| 00011   |
| 00123   |
| 12345   |
| 123456  |
| 1234567 |
+---------+

觀察:

  • 不足 5 位 → 左補 0。
  • 超過 5 位 → 正常顯示,不截斷、不報錯。

三、為何預設是 11?

INT 有號最大值 2147483647 共 10 位,加上可能的負號共 11 字元,故預設 M=11 可完整顯示所有值而無需補 0。

四、常見誤區澄清

誤區事實
INT(3) 只能存 3 位數可存 10 位,INT(3) 與 INT(11) 儲存上限相同
M 影響索引長度索引長度取決於資料類型(INT 固定 4 bytes),與 M 無關
不加 ZEROFILL 也會補 0只有 ZEROFILL 才補 0,否則純數字輸出

五、最佳實踐

  1. 建表直接寫 INT 或 INT(11),別糾結數字。
  2. 需固定寬度輸出(如訂單號、員工編號)→ 應用層格式化或用 LPAD(),勿依賴 ZEROFILL(隱含 UNSIGNED 且非標準 SQL)。
  3. 節省空間請選更小類型:TINYINT/SMALLINT/MEDIUMINT。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved