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

MySQL VARCHAR 長度限制全解析:存儲、編碼、行大小三大規則與計算實例

     編輯:MySQL 資料庫相關知識

VARCHAR 最大長度非固定,受三大規則制約

規則一:存儲限制

VARCHAR 實際內容存於聚簇索引外,長度前綴佔 1~2 字節(>255 用 2 字節),故理論上限 65,535 字節。

規則二:字符編碼限制

字符集單字最大字節最大字符數
gbk232,766
utf8321,845
utf8mb4416,383

超過則強制轉為 TEXT 並產生 Warning。

規則三:行大小限制(最關鍵)

MySQL 單行定義長度不能超過 65,535 字節(不含 BLOB/TEXT 溢出頁)。超過報錯:ERROR 1118 (42000): Row size too large。

實際計算範例

案例 A:單表單 VARCHAR(gbk)

CREATE TABLE t4 (c VARCHAR(N)) CHARSET=gbk;

最大 N = (65535 - 1 - 2) / 2 = 32,766

  • -1:行數據從第 2 字節開始
  • -2:VARCHAR 長度前綴 2 字節
  • /2:gbk 雙字節編碼

案例 B:混合字段表(utf8)

CREATE TABLE t4 (c INT, c2 CHAR(30), c3 VARCHAR(N)) CHARSET=utf8;

最大 N = (65535 - 1 - 2 - 4 - 30×3) / 3 = 21,812

  • -4:INT 佔 4 字節
  • -90:CHAR(30) × 3 字節
  • /3:utf8 三字節編碼

轉為 TEXT 後的定義長度

若 VARCHAR 超編碼限制被轉為 TEXT,每列僅佔 11 字節(指針),不再計入行長度限制。

總結:設計表時務必按「行總長度」倒推 VARCHAR 上限,別只看單列定義。

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