MySQL建表报#1170错误:TEXT字段用作键未指定键长问题咨询
#1170 - BLOB/TEXT column 'name' used in key specification without a key length
报错产生原因
该报错是MySQL针对TEXT/BLOB类型字段设置索引/外键时的固有规则限制,具体成因如下:
- TEXT属于可变长大文本类型,存储长度不固定,MySQL无法直接对这类字段做全长度的索引校验或外键关联校验。如果要给TEXT类型字段创建索引,必须指定前缀长度(例如
INDEX (name(100))代表仅对name字段前100个字符创建索引),你在创建name字段的外键时没有指定对应前缀长度,直接触发了该报错。 - 即使你给TEXT字段补充了前缀索引,也无法满足外键的关联要求:外键要求父表(此处为
cars表)的被关联列必须是完整的主键或者唯一索引,而TEXT/BLOB类型本身就不支持设置全长度的唯一约束或主键,本质上TEXT类型字段不能作为外键的关联字段。
推荐修复方案
你可以根据业务需求选择以下任意一种方案修复:
- 方案一:将
cars和carsindrive两张表的name字段类型改为有固定长度上限的VARCHAR类型,比如VARCHAR(255),即可满足外键关联的类型要求。 - 方案二:调整外键关联逻辑,使用
cars表的整型主键ID作为关联字段,在carsindrive表新增对应关联ID字段做外键,该方案更符合关系型数据库设计规范,查询和关联校验的性能也更高。
内容的提问来源于stack exchange,提问作者Роман
相关产品推荐
相关产品推荐

