前言:最近在RDS上给某表某列建索引时报错,本文仅做记录一用

一、报错

  1. ERROR 1709 (HY000): Index column size too large. The maximum column size is 767 bytes.

二、分析

从报错提示看,mysql对列建索引已经超出了最大长度767字节,数据库字符集是utf8mb4,每个字符占用4个字节,我们算一下767/4=191字符,也就是说最多只能为196个字符长度的列建立索引,我们建立的索引列为vachar(255),显然已经超过长度限制了。

三、解决办法

  • 设置innodb_large_prefix 为 ON;

  • 创建表的时候指定表的 row format 格式为 Dynamic 或者 Compressed

  • 修改现有表的row format

  • 创建索引

注:将 Innodb_large_prefix 修改为 on 后,对于 Dynamic 和 Compressed 格式的InnoDB 引擎表,其最大的索引字段长度支持到 3072 字节