当前位置:   article > 正文

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

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:

  1. create table idx_length_test_02
  2. (
  3. id int auto_increment primary key,
  4. name varchar(255)
  5. ) ROW_FORMAT=DYNAMIC default charset utf8mb4;
  6. insert into idx_length_test_02 values (null,'xxxxxxxxxx');
  7. create index idx_name on idx_length_test_02 (name);
  8. show warnings;
  9. show create table idx_length_test_02 \G;

修改现有表:

  1. alter table <table_name> row_format=dynamic;
  2. alter table <table_name> row_format=compressed;

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/599609
推荐阅读
相关标签
  

闽ICP备14008679号