mysql中varchar可以放多少个中文字符?
varchar最大长度:65535 字节(受限于行大小和字符集)
🔹一、65535 字节到底有多长?
🧮 1. 65535
字节 ≈ 64 KB
(更准确是 64 * 1024 - 1
)
- 1 KB(千字节) = 1024 字节
- 所以
65535 字节 ≈ 64 KB
🔹二、可以放多少个中文字符?
这个取决于使用的字符集(Character Set):
✳️ 常见字符集对比:
字符集 | 每个英文字符占用 | 每个中文字符占用 | 说明 |
---|---|---|---|
latin1 | 1 字节 | ❌ 不支持中文 | 仅限英文 |
utf8 | 1 字节 | 3 字节 | MySQL 的“UTF-8”是最多 3 字节的 UTF-8 实现 |
utf8mb4 | 1 字节 | 3~4 字节 | 推荐,全面支持 emoji 等特殊字符 |
📌 举例计算:VARCHAR(65535)
能存多少个中文字符?
由于 VARCHAR
类型本身要额外消耗 1~2 个字节保存长度信息,因此最大字符串长度为:
最大长度 = 65535 字节 - 长度字段开销(1 或 2 字节)
- 假设使用
utf8mb4
,每个中文字符 ≈ 3 字节 - 最多能放的中文字符数量约为:
(65535 - 2) / 3 ≈ 21844 个中文字符
💡 如果每个字符都是 emoji(4 字节),最多约为 16383 个
🔹三、为什么 VARCHAR
最长是 65535 字节?
MySQL 在每一行的数据大小(不含 TEXT/BLOB
)限制是 65535 字节。所以即使你有一个 VARCHAR(100000)
,也存不下。
- 实际上,
VARCHAR(N)
中的N
指的是 字符数,而 MySQL 会根据字符集预估最大可能占用的字节数 - 如果你的表中还有其他字段,或者使用了
utf8mb4
,那么VARCHAR
允许的最大N
会小于 65535
👉 比如:
CREATE TABLE test (col VARCHAR(65535) CHARACTER SET utf8mb4
);
这条语句会报错,因为:
- 每个字符最多 4 字节
- 65535 / 4 = 16383.75(最多
VARCHAR(16383)
) - 加上长度前缀(2字节),所以不能建
VARCHAR(65535)
🔹四、字节(byte)与 KB/MB 之间的转换?
单位 | 关系 |
---|---|
1 KB | 1024 字节 |
1 MB | 1024 KB = 1,048,576 字节 |
1 GB | 1024 MB = 1,073,741,824 字节 |
✅ 总结一句话:
VARCHAR
的最大长度由 行限制(65535 字节)、字符集(1~4 字节/字符) 和 **表结构(其他字段)**共同决定utf8
中文 1 字符 ≈ 3 字节,最多能放约 21844 个中文字符(纯中文字段,无其他字段)
如你使用了 utf8mb4
并有多个字段,建议限制 VARCHAR
长度在 1000~4000 字符左右,确保不会超出最大行长度。