324 字
2 分钟
MySQL-VARCHAR支持的最大长度

MySQL中,最大行长度限制为65535字节,如果一行中仅仅有一个varchar字段,它的最大长度是多少呢? (InnoDB/MyISAM 中一行最大长度限制是 65535 字节(65 KB 左右)。) 长度> 255,存储varchar长度需要2字节,长度<255,存储varchar长度需要1字节。

所以

  • 当长度>255且非空的时候,可以存储65535 - 2 = 65533 字节。
  • 当长度>255且可以为空的时候,可以存储65535 - 2 - 1(存储NULL标志) = 65532字节。
  • 当长度<255且非空的时候,可以存储65535 - 1 = 65534 字节。
  • 当长度<255且可以为空的时候,可以存储65535 - 1 - 1(存储NULL标志) = 65533字节。

如果只有一个 VARCHAR 字段

假设表里只有这一列:

CREATE TABLE t (
v VARCHAR(N)
) ENGINE=InnoDB;

行最大长度:65535 字节。

除了数据外,还有:

NULL 标志位(至少 1 字节,即使只有一列)。

VARCHAR 长度字节(1 或 2)。

所以最大能用来存储 v 的 = 65535 - 1 (NULL 标志) - 2 (长度字节) = 65532 字节。

因此:

✅ 单列 VARCHAR 最大可定义为 VARCHAR(65532)

如果是非null,就不需要占用那一字节null标志位了

CREATE TABLE t (
v VARCHAR(N) NOT NULL
) ENGINE=InnoDB;

这里N就可以是65533了