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

MySQL 與 SQL Server 差異系列(二):整數顯示寬度機制解析

     編輯:MySQL 資料庫相關知識

MySQL 整數類型支援可選的「顯示寬度」語法(如 INT(11)),這是 SQL Server 不具備的特性。本文深入解析其真實含義與常見誤區。

語法與 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,647
  • 不影響儲存空間:與未指定寬度的同類型完全一致

實際行為演示

CREATE 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  (超過寬度仍完整顯示)

MySQL 整數類型預設顯示寬度

類型儲存空間預設顯示寬度有號範圍無號範圍
TINYINT1 位元組4-128 ~ 1270 ~ 255
SMALLINT2 位元組6-32,768 ~ 32,7670 ~ 65,535
MEDIUMINT3 位元組9-8,388,608 ~ 8,388,6070 ~ 16,777,215
INT / INTEGER4 位元組11-2,147,483,648 ~ 2,147,483,6470 ~ 4,294,967,295
BIGINT8 位元組20-9.22E18 ~ 9.22E180 ~ 1.84E19

常見誤區與最佳實踐

  1. 誤以為限制長度:VARCHAR(10) 限制字元數,INT(10) 不限制數值大小
  2. ZEROFILL 隱含 UNSIGNED:使用 ZEROFILL 會自動變為無號數,負數將無法儲存
  3. 應用層格式化更靈活:建議在應用程式或報表層處理顯示格式,資料庫層專注儲存
  4. 遷移到 SQL Server/PostgreSQL:需移除顯示寬度語法,僅保留類型名稱

總結

MySQL 顯示寬度是外觀屬性,非約束屬性。理解此機制可避免設計誤區,跨資料庫遷移時須妥善處理語法差異。

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