赞
踩
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) 类型字段上创建索引会失败。
解决处理:
增加配置:
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 <table_name> row_format=dynamic;
- alter table <table_name> row_format=compressed;
##innodb_large_prefix=1并且innodb_file_format=BARRACUDA时,对于row_format为dynamic的表可以指定索引列长度大于767 bytes。但是索引列总长度的不能大于3072 bytes的限制仍然存在
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。