ERROR 1170 (42000): BLOB/TEXT column 'content' used in key specification without a key length

这个错误出现在给表建索引时包含了TEXTBLOB类型字段,这里的content就是一个TEXT字段。为什么这些类型的字段建立索引会出错呢?这些类型不能建立索引吗?

其实,是可以建立索引的。但是MySQL只能对TEXTBLOBN个字符建立索引。根据MySQL官网文档描述,可以知道,MySQL对于字符串类型都只能对前N个加索引,在对VARCHARCHAR等加索引时,没有出现这个错误,是因为VARCHARCHAR已经指定了长度,所以在建立索引时不是必须指定长度的,而TEXTBLOB则是必须得。

另外,根据Column Prefix Key Parts部分描述,还可以看到,对于长度是有限制的。单位为bytes,在InnoDB表里长度限制为767BMyISAM表里长度限制为1000BInnoDB有个配置innodb_large_prefix开启后,长度限制增加到3072B。这个选项在MySQL 5.7里面默认开启,在8.0里面已经移除。