问题处理:Column length too big for column 'Flist' (max = 21845);

我们都知道mysql建表的时候列长度有65535的限制,但是这个单位是字节, 不同字符集下每个字符占用的字节数不同,utf8下每个字符占用3个字节(65535/3=21845),gbk下每个字符占用2个字节(65535/2=32767),latin1字符集下一个字符占用一个字节。但一般情况下我们都是用utf8bm4,

MySQL4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节) max varchar(65536)

MySQL5.0版本以上,varchar(20),指的是20字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节)max varchar(21845)

查看MySQL版本:

查看MySQL存储引擎

那varchar(21845)应该是varchar的最大值了

但是varchar (21845)修改保存的时候报错了

ERROR 1071 (42000) : Specified key was too long; max key length is 3072 bytes

这个报错的意思是:指定密钥太长;最大密钥长度为3072字节

这跟 系统变量innodb_large_prefix(默认启用,注意实验版本为MySQL 5.6.41,默认是关闭的,MySQL 5.7默认开启)有关,则对于使用DYNAMIC或COMPRESSED行格式的InnoDB表,索引键前缀限制为3072字节。如果禁用innodb_large_prefix,则对于任何行格式的表,索引键前缀限制为767字节。

3072/3=1024

varchar(1024),保存成功。【utf8】

varchar(768),保存成功。【utf8bm4】 mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rorschach01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值