给MySql数据库表Varchar类型字段加索引时报错:“Specified key was too long; max key length is xxx bytes”;


运行环境 Runtime environment

1
2
3
操作系统: Windos10  
navicat: 15.0.2
mysql: 5.7.31

症状

scrapy 爬虫采集入库的时候,管道打印了报错日志。

给MySql数据库表Varchar类型字段加索引时报错:“Specified key was too long; max key length is xxx bytes”;

1
“Specified key was too long; max key length is xxx bytes”;

问题原因

采集的时候入库的有关字段是用来存储url链接的,但是采集的数据,惊人的给我返回了3742字节长度的一条url链接。

这样的长度,确实不是年幼的varchar类型所能承受的(?)。

应该使用更能适应场景text类型,来存储url。

解决办法

修改字段长度,注意编码格式,例如你的字段长度为100(指的是字符数),而编码是utf-8.

那么最大占用3乘100=300 byte,如果编码是utf8mb4则最大占用4乘100=400 byte。

所以修改字段长度时要根据报错提示的长度以及你字段的长度和编码来修改;