根据网络上找到的结果(不能保证准确),在5.0.3以后版本中,n均代表字符数,而不是字节数;我用来测试的版本是5.7.20,该版本中,n表示字符数。
验证过程如下
建表
CREATE TABLE `teststring` ( `c` char(4) DEFAULT NULL, `v` varchar(4) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;插入数据并查询数据长度
INSERT INTO teststring VALUES ('幻乐之城','幻乐之城') SELECT LENGTH(v),CHAR_LENGTH(v),LENGTH(c),CHAR_LENGTH(c) FROM teststring;结果如下:
如果表中所有varchar字段均为not null 则最大数据长度可为65533
varchar 的最大长度受限于最大行长度(max row size,65535bytes),假如create table tt(age int,addr varchar(N) default null) charset=utf8 则addr字段N的最大值为(65535-1-2-4)/3,1是因为null标志,2是因为存储长度值,4是因为int子段和行长度限制
可存储的最大字符数和字符编码有关,如当采用utf8编码时,一个数字或字母占1个字节,一个汉字占3个字节;可参考https://dev.mysql.com/doc/refman/5.7/en/char.html
参考:
http://www.cnblogs.com/gomysql/p/3615897.html
转载于:https://www.cnblogs.com/canger/p/9845969.html