MySQL varchar类型最大值是多少

2023-06-07,

本篇内容介绍了“MySQL varchar类型最大值是多少”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

问题:MySQL 数据库的varchar字段类型最大存储长度到底是多少?

问题分析

一切以官方文档为准,翻了下官方描述如下:

In MySQL 4.1 the length is always 1 byte. In MySQL 5.0 the length may be either 1 byte (for up to 255) or 2 bytes (for 256 to 65535).

大概意思就是说:

  • 在MySQL 4.1以前,长度总是1个字节(varchar(20),指的是20字节)

  • 在MySQL 5.0以后,长度可以是1字节(最多255个字节)或2个字节(256到65535)

按照官网说法最大值是65535bytes,utf8mb4编码情况下每个字符占4个bytes,最大值应该为16383.75

65535/4=16383.75

实践验证

到此貌似已经有了结论了,但实际情况真的是这样的么?

我们来实验下试试看?

mysql 版本:select version(); // 5.7

1、若一个表只有一个varchar类型

定义如下:

CREATETABLE`t1` (    `c`varchar(N) DEFAULTNULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

那表 t1 的`c`字段的最大长度N为多少呢?

(65535−1−2)/4=16383

备注:
· 减1的原因是实际行存储从第二个字节开始;
· 减2的原因是varchar头部的2个字节表示长度;
· 除4的原因是字符编码是utf8mb4。

2)若表中包含其他多种类型的情况呢

定义如下:

CREATETABLE`t2` (  `c1`int(10) DEFAULTNULL,  `c2`char(32) DEFAULTNULL,  `c3`varchar(N) DEFAULTNULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

那表 t2 的`c`字段的最大长度N为多少呢?

(65535−1−2−4−32*4)/4=16350

备注:
· 减1、减2的原因同上;
· 减4的原因是int类型占用4个字节;
· 减32*4的原因是utf8mb4编码的char类型占用4个字节(长度32)

我们来验证一下是否如上述推断计算所述:

1)修改t2表c3字段长度为16350
alter table `t2` modify column `c3` varchar(16350)

执行成功。

2)修改t2表c3字段长度为16351

alter table `t2` modify column `c3` varchar(16351);

执行失败,报错信息如下:

Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs.

“MySQL varchar类型最大值是多少”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注本站网站,小编将为大家输出更多高质量的实用文章!

《MySQL varchar类型最大值是多少.doc》

下载本文的Word格式文档,以方便收藏与打印。