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

MySQL int(M) 顯示寬度詳解:M 不是長度限制,zerofill 才生效

     編輯:MySQL 綜合教學

MySQL int(M) 顯示寬度詳解:M 不是長度限制,zerofill 才生效

初學者常誤以為 int(3) 只能存 3 位數字,int(11) 存 11 位。實則 M 僅是顯示寬度,配合 ZEROFILL 才會在查詢結果左側補 0,不影響存儲範圍與佔用空間。本文通過實測徹底釐清誤區。

一、核心結論

  • int(M) 固定佔用 4 字節,有符號範圍 -2147483648 ~ 2147483647,無符號 0 ~ 4294967295。
  • M(1~255)僅用於查詢結果顯示,不限制插入值大小。
  • 只有加上 ZEROFILL 時,M 才生效:查詢結果左側補 0 至寬度 M。
  • ZEROFILL 隱含 UNSIGNED(無符號)。

二、實測驗證

-- 建表
CREATE TABLE t1 (c INT(3) ZEROFILL);
CREATE TABLE t2 (c INT ZEROFILL);  -- 預設寬度 10
CREATE TABLE t3 (c INT);           -- 無 ZEROFILL

-- 插入 8
INSERT INTO t1 SET c=8;  -- 查詢結果:008
INSERT INTO t2 SET c=10; -- 查詢結果:0000000010
INSERT INTO t3 SET c=10; -- 查詢結果:10

-- 插入超寬度值
INSERT INTO t1 SET c=12345; -- 查詢結果:12345(不截斷,正常顯示)

三、整數類型家族與預設顯示寬度

類型儲存空間有符號範圍無符號範圍預設 M
TINYINT1 字節-128 ~ 1270 ~ 2554
SMALLINT2 字節-32768 ~ 327670 ~ 655356
MEDIUMINT3 字節-8388608 ~ 83886070 ~ 167772159
INT4 字節-2147483648 ~ 21474836470 ~ 429496729511
BIGINT8 字節-9223372036854775808 ~ 92233720368547758070 ~ 1844674407370955161520

四、實務建議

  1. 建表不指定 M:INT 等同 INT(11),語義更清晰。
  2. 業務需補零顯示:應用層格式化(如 LPAD(id, 10, '0'))優於資料庫 ZEROFILL,避免耦合顯示邏輯。
  3. 主鍵自增:直接 INT UNSIGNED AUTO_INCREMENT,無需關心 M。

記住:M 是顯示屬性,非存儲屬性,別再被誤導。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved