这个错误出现在给表建索引时包含了TEXT
、BLOB
类型字段,这里的content
就是一个TEXT
字段。为什么这些类型的字段建立索引会出错呢?这些类型不能建立索引吗?
其实,是可以建立索引的。但是MySQL
只能对TEXT
、BLOB
前N个字符建立索引。根据MySQL
官网文档描述,可以知道,MySQL
对于字符串类型都只能对前N个加索引,在对VARCHAR
、CHAR
等加索引时,没有出现这个错误,是因为VARCHAR
、CHAR
已经指定了长度,所以在建立索引时不是必须指定长度的,而TEXT
、BLOB
则是必须得。
另外,根据Column Prefix Key Parts部分描述,还可以看到,对于长度是有限制的。单位为bytes
,在InnoDB
表里长度限制为767B
,MyISAM
表里长度限制为1000B
。InnoDB
有个配置innodb_large_prefix开启后,长度限制增加到3072B
。这个选项在MySQL 5.7里面默认开启,在8.0里面已经移除。