MySQL 整數類型支援可選的「顯示寬度」語法(如 INT(11)),這是 SQL Server 不具備的特性。本文深入解析其真實含義與常見誤區。
-- MySQL:合法
CREATE TABLE tb_emp (id BIGINT(1));
-- SQL Server:報錯
CREATE TABLE abc (id INT(11));
-- 錯誤 2716:不能對數據類型 int 指定列寬
ZEROFILL 時左側補零INT(3) 仍佔 4 位元組,最大值仍為 2,147,483,647CREATE TABLE demo (
num1 INT(3) ZEROFILL,
num2 INT(5),
num3 INT
);
INSERT INTO demo VALUES (5, 5, 5), (12345, 12345, 12345);
SELECT * FROM demo;
-- 結果:
-- num1 num2 num3
-- 005 5 5
-- 12345 12345 12345 (超過寬度仍完整顯示)
| 類型 | 儲存空間 | 預設顯示寬度 | 有號範圍 | 無號範圍 |
|---|---|---|---|---|
| TINYINT | 1 位元組 | 4 | -128 ~ 127 | 0 ~ 255 |
| SMALLINT | 2 位元組 | 6 | -32,768 ~ 32,767 | 0 ~ 65,535 |
| MEDIUMINT | 3 位元組 | 9 | -8,388,608 ~ 8,388,607 | 0 ~ 16,777,215 |
| INT / INTEGER | 4 位元組 | 11 | -2,147,483,648 ~ 2,147,483,647 | 0 ~ 4,294,967,295 |
| BIGINT | 8 位元組 | 20 | -9.22E18 ~ 9.22E18 | 0 ~ 1.84E19 |
VARCHAR(10) 限制字元數,INT(10) 不限制數值大小ZEROFILL 會自動變為無號數,負數將無法儲存MySQL 顯示寬度是外觀屬性,非約束屬性。理解此機制可避免設計誤區,跨資料庫遷移時須妥善處理語法差異。