MySQL ERROR 1071 (42000) ——筑梦之路

mysql报错信息:

ERROR 1071 (42000): Specified key was too long; max key length is 3072 bytes

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

错误原因:

由于 MySQL Innodb 引擎表索引字段长度的限制为 767 字节,因此对于多字节字符集的大字段(或者多字段组合索引),创建索引会出现上面的错误。

以 utf8mb4 字符集 字符串类型字段为例:utf8mb4 是 4 字节字符集,则默认支持的索引字段最大长度是: 767 字节 / 4 字节每字符 = 191 字符,因此在 varchar(255) 或 char(255) 类型字段上创建索引会失败。

MySQL :: MySQL 5.6 Reference Manual :: 10.9.1 The utf8mb4 Character Set (4-Byte UTF-8 Unicode Encoding)

解决处理:

增加配置:

innodb_large_prefix=ON

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

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

eg:

create table idx_length_test_02
(
id int auto_increment primary key,
name varchar(255)
) ROW_FORMAT=DYNAMIC default charset utf8mb4;

insert into idx_length_test_02 values (null,'xxxxxxxxxx');

create index idx_name on idx_length_test_02 (name);

show warnings;
show create table idx_length_test_02 \G;

修改现有表:

alter table  row_format=dynamic;
alter table  row_format=compressed;

##innodb_large_prefix=1并且innodb_file_format=BARRACUDA时,对于row_format为dynamic的表可以指定索引列长度大于767 bytes。但是索引列总长度的不能大于3072 bytes的限制仍然存在

你可能感兴趣的:(数据库技术,mysql,数据库,database)