一、错误

Mysql创建索引

ALTER TABLE ac_article ADD INDEX `idx_title` (title); 

出现mysql #1170错误:

 BLOB/TEXT column 'title' used in key specification without a key length

二、原因分析

        其中,title 是 text 类型的字段,而MySQL针对BLOB/TEXT类型字段设置索引时,需要指定长度(即对数据的前N个字符建索引)。而且这样的类型不能作为主键,也不能设置为UNIQUE类型的索引。因此这个错误也常常会发生在和TEXT/BLOB类似的类型,如:TINYTEXT,MEDIUMTEXT,LONGTEXT ,TINYBLOB,MEDIUMBLOB 和LONGBLOB。

官方文档也有说明:

Prefixes must be specified for BLOB and TEXT key parts. Additionally, BLOB and TEXT columns can be indexed only for InnoDB, MyISAM, and BLACKHOLE tables.

必须为 BLOB 和 TEXT 键部分指定前缀。 此外,BLOB 和 TEXT 列只能为 InnoDB、MyISAM 和 BLACKHOLE 表建立索引。

三、解决方法

指定索引字段长度即可

ALTER TABLE ac_article ADD INDEX `idx_title` (title(50));

扩展

        如果在业务允许的情况下,尽可能少用BLOB/TEXT类型,换成VARCHAR类型。但需要注意的是:VARCHAR类型的大小也不能大于1024,如果长度大于1024的时候,创建索引时会出现mysql #1071错误:

Specified key was too long; max key length is 3072 bytes

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐