开发者社区> 丁奇> 正文

MySQL中varchar最大长度是多少?

简介:
+关注继续查看

  被问到一个问题:MySQLvarchar最大长度是多少?这不是一个固定的数字。本文简要说明一下限制规则。

1、限制规则

字段的限制在字段定义的时候有以下规则:

a) 存储限制

varchar 字段是将实际内容单独存储在聚簇索引之外,内容开头用12个字节表示实际长度(长度超过255时需要2个字节),因此最大长度不能超过65535

b) 编码长度限制

字符类型若为gbk,每个字符最多占2个字节,最大长度不能超过32766;

字符类型若为utf8,每个字符最多占3个字节,最大长度不能超过21845

若定义的时候超过上述限制,则varchar字段会被强行转为text类型,并产生warning

c) 行长度限制

导致实际应用中varchar长度限制的是一个行定义的长度。 MySQL要求一个行的定义长度不能超过65535。若定义的表长度超过这个值,则提示

ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs

2、计算例子

举两个例说明一下实际长度的计算。

a) 若一个表只有一个varchar类型,如定义为

create table t4(c varchar(N)) charset=gbk;

则此处N的最大值为(65535-1-2)/2= 32766

1的原因是实际行存储从第二个字节开始’;

2的原因是varchar头部的2个字节表示长度;

2的原因是字符编码是gbk

b) 若一个表定义为

create table t4(c int, c2 char(30), c3 varchar(N)) charset=utf8;

则此处N的最大值为 (65535-1-2-4-30*3)/3=21812

1和减2与上例相同;

4的原因是int类型的c4个字节;

30*3的原因是char(30)占用90个字节,编码是utf8

如果被varchar超过上述的b规则,被强转成text类型,则每个字段占用定义长度为11字节,当然这已经不是“varchar”了。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
MySQL面试常见之数据表分区设计& 查询缓存&字符集修改&join&varchar
MySQL面试常见之数据表分区设计& 查询缓存&字符集修改&join&varchar
44 0
Mysql中varchar字符串的比较,swoole预处理参数绑定
使用的是php swoole,预处理。 解决有两条路:mysql的字段类型改为数字;研究swoole的参数预处理问题,可以测试普通PHP的预处理是否也有问题
24 0
mysql更新varchar类型字段长度报错:ERROR 1074 (42000): Column length too big for column ‘value‘ (max = 21845);
mysql更新varchar类型字段长度报错:ERROR 1074 (42000): Column length too big for column ‘value‘ (max = 21845);
212 0
软件测试mysql面试题:mysql中int(10)和char(10)以及varchar(10)的区别?
软件测试mysql面试题:mysql中int(10)和char(10)以及varchar(10)的区别?
61 0
软件测试mysql面试题:varchar与char的区别?
软件测试mysql面试题:varchar与char的区别?
28 0
MySQL之char、varchar类型简析
MySQL之char、varchar类型简析
87 0
面试官:MySQL 中的 varchar 最多能存储多少个字符?大部分人都会答错。。。(3)
面试官:MySQL 中的 varchar 最多能存储多少个字符?大部分人都会答错。。。(3)
30 0
面试官:MySQL 中的 varchar 最多能存储多少个字符?大部分人都会答错。。。(2)
面试官:MySQL 中的 varchar 最多能存储多少个字符?大部分人都会答错。。。(2)
151 0
面试官:MySQL 中的 varchar 最多能存储多少个字符?大部分人都会答错。。。(1)
面试官:MySQL 中的 varchar 最多能存储多少个字符?大部分人都会答错。。。
52 0
MySQL的varchar水真的太深了,你真的会用吗?
MySQL的varchar水真的太深了,你真的会用吗?
73 0
+关注
丁奇
专注于数据存储系统、MySQL源码研究和改进、MySQL性能优化和功能改进,并设计了阿里云高可靠双通道binlog方案。他在业务场景分析、系统瓶颈分析、性能优化方面拥有丰富的经验。微博@淘宝丁奇。
文章
问答
文章排行榜
最热
最新
相关电子书
更多
让 MySQL 原生分布式触手可及
立即下载
好的 MySQL 兼容可以做到什么程度
立即下载
云数据库RDS MySQL从入门到高阶
立即下载