mycolumn varchar(M),这里的M是字符个数还是字节个数,M的最大是多少?
首先,这个官方文档截图,回答了所有问题
下面,中文解释下
先说结论:
1. M 是字符的个数
2. M 的最大值 取决于 行字节数(这是个常量值,即65535)以及 建表时的charset
例如:
gbk时,每个字符 包含2个字节,所以,charset='gbk'时,varchar的最大长度是
(65535-2)/2=32766.5,即,varchar最大长度是 32766
drop table if exists t_32766; -- 失败,因为长度 32767 超了 create table t_32766(v varchar(32767) not null default '') engine=InnoDB charset='gbk'; -- 成功 create table t_32766(v varchar(32766) not null default '') engine=InnoDB charset='gbk';
utf8时,每个字符 包含3个字节,所以,charset='utf8'时,varchar的最大长度是
(65535-2)/3=21844.33333333,即,varchar最大长度是 21844
drop table if exists t_21844; -- 失败,因为长度 21845 超了 create table t_21844(v varchar(21845) not null default '') engine=InnoDB charset='utf8'; -- 成功 create table t_21844(v varchar(21844) not null default '') engine=InnoDB charset='utf8';
另外:
1. utf8存储时,可以用1到6个字节来存储的。即a, b, c用一个字节存储;中文3个字节;还有些特殊的是6个字节,不过,mysql总是用3个字节(估计是因为3字节以上的utf8用的很少把。猜的)
2. 我的mysql版本是:MySQL Community Server (GPL) 5.6.23
完