问题: 创建一张表报如下错误index column size too large. the maximum column size is 767 bytes
原因: MySQL Innodb索引字段长度最大为767字节,如果索引大小超过767字节则会引发该错误。
解决办法:
show variables like ‘innodb_large_prefix’;
set global innodb_large_prefix = ON;
show variables like ‘innodb_file_format’;
set global innodb_file_format = BARRACUDA;
innodb_large_prefix
- ON :Innodb表的行记录格式(row format)是Dynamic或Compressed,单列索引长度上限扩展到3072个字节 (5.7默认)
- OFF:Innodb表的单例索引长度最多为767个字节,索引长度超出后,主键索引会创建失败,辅助索引会被截断成为前缀索引(5.6默认的)
innodb_file_format
- Antelope(compact、redundant): 先前未命名的,原始的InnoDB文件格式。它支持两种行格式:COMPACT 和 REDUNDANT。MySQL5.6的默认文件格式。可以与早期的版本保持最大的兼容性。不支持 Barracuda 文件格式。
- Barracuda(compressed、dynamic): 新的文件格式。它支持InnoDB的所有行格式,包括新的行格式:COMPRESSED 和 DYNAMIC。与这两个新的行格式相关的功能包括:InnoDB表的压缩,长列数据的页外存储和索引建前缀最大长度为3072字节。