暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL VARCHAR最大长度详解

原创 慢慢 2025-02-27
34

MySQL中VARCHAR类型的最大长度取决于多个因素,包括字符集、存储引擎以及行大小的限制。以下是详细总结:

1. 基本规则

  • 最大字节限制:单列VARCHAR的最大存储空间为 65,535字节(所有字段的总行大小也受此限制)。

  • 长度标识开销VARCHAR需要额外1或2字节存储长度信息。若长度 ≤255字符,用1字节;若长度 >255字符,用2字节。

    • 因此,实际可用字节为 65,535 - 2 = 65,533字节(假设需要2字节长度标识)。

2. 字符集影响

不同字符集下,单个字符占用的字节数不同,导致最大字符数不同:

  • latin1(单字节字符):

    • 最大字符数 = (65,535 - 2) / 1 = 65,533字符

  • utf8(最多3字节/字符):

    • 最大字符数 = (65,535 - 2) / 3 ≈ 21,844字符

  • utf8mb4(最多4字节/字符,支持如表情符号):

    • 最大字符数 = (65,535 - 2) / 4 = 16,383字符

3. 行大小限制

  • 所有字段的总存储空间(含长度标识)不得超过 65,535字节。若表中有其他字段,需减少VARCHAR长度。

  • 示例:若使用latin1且有两个VARCHAR字段,每个字段最大长度为 32,765字符(总和为32,765×2 + 2×2 = 65,534字节)。

4. 存储引擎差异

  • InnoDB:默认行大小限制为 65,535字节。使用DYNAMICCOMPRESSED行格式时,若启用innodb_large_prefix(MySQL 5.7+默认开启),可支持更大索引前缀(但单列VARCHAR最大仍受上述限制)。

  • MyISAM:同样遵循65,535字节行限制。

5. 版本差异

  • MySQL < 5.0.3VARCHAR最大长度为 255字符

  • MySQL ≥ 5.0.3:支持最大 65,535字节(需考虑字符集)。

示例代码

sql

复制

-- latin1字符集,单列最大长度
CREATE TABLE example_latin1 (
    data VARCHAR(65533) CHARSET latin1
) ENGINE=InnoDB;

-- utf8mb4字符集,单列最大长度
CREATE TABLE example_utf8mb4 (
    data VARCHAR(16383) CHARSET utf8mb4
) ENGINE=InnoDB;
复制

总结

  • 最大字符数 = (65,535 - 2) / [字符集每字符最大字节数]。

  • 常见字符集下的最大值:

    • latin1: 65,533字符

    • utf8: 21,844字符

    • utf8mb4: 16,383字符

需确保总行大小不超过65,535字节,并考虑存储引擎及行格式的额外限制。


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论