博客
关于我
MySQL创建索引时提示“Specified key was too long; max key length is 767 bytes”
阅读量:789 次
发布时间:2023-02-12

本文共 868 字,大约阅读时间需要 2 分钟。

在使用MySQL时,创建索引时出现“Specified key was too long; max key length is 767 bytes”错误,通常是由于索引字段的长度超过了InnoDB引擎的限制。以下是解决方案:

问题分析

  • 错误背景:InnoDB引擎对索引字段的最大长度限制为767字节,这在使用多字节字符集(如utf8mb4)时尤为明显,因为每个字符占用4字节,767/4=191字符。因此,定义超过191字符的字段(如varchar(255)或char(255))创建索引时会失败。
  • 原因根源:MySQL 8.0已移除innodb_large_prefix参数,现仅支持通过修改表的Row_format来解决。

解决方案

1. 配置InnoDB引擎参数

  • 注意:由于innodb_large_prefix已被移除,请直接跳过此步骤。

2. 修改表的Row_format

  • 步骤1:登录数据库,执行以下SQL语句查看目标表的Row_format:

    SHOW TABLE STATUS LIKE 'TableName'\G

    检查输出中Current_row_format的值,确认是否为DYNAMIC或COMPRESSED。

  • 步骤2:若当前Row_format不是DYNAMIC或COMPRESSED,执行以下命令修改:

    ALTER TABLE TableName Row_format=DYNAMIC;

    ALTER TABLE TableName Row_format=COMPRESSED;

    注意:在修改Row_format前,确保表未被使用或已备份,以避免潜在数据丢失风险。

优化建议

  • 性能考量:DYNAMIC和COMPRESSED格式的表在某些情况下可能影响查询性能和存储效率,请根据业务需求选择合适的Row_format。
  • 字段长度控制:确保索引字段长度不超过3072字节,避免再次触发错误。

通过以上步骤,应该能够成功创建所需索引。如果问题依旧,建议参考MySQL官方文档或咨询技术支持,确保每一步操作的正确性。

转载地址:http://elbfk.baihongyu.com/

你可能感兴趣的文章
mysql 删除日志文件详解
查看>>
mysql 判断表字段是否存在,然后修改
查看>>
MySQL 到底能不能放到 Docker 里跑?
查看>>
mysql 前缀索引 命令_11 | Mysql怎么给字符串字段加索引?
查看>>
MySQL 加锁处理分析
查看>>
mysql 协议的退出命令包及解析
查看>>
mysql 参数 innodb_flush_log_at_trx_commit
查看>>
mysql 取表中分组之后最新一条数据 分组最新数据 分组取最新数据 分组数据 获取每个分类的最新数据
查看>>
MySQL 命令和内置函数
查看>>
mysql 四种存储引擎
查看>>
MySQL 在并发场景下的问题及解决思路
查看>>
MySQL 基础架构
查看>>
MySQL 基础模块的面试题总结
查看>>
MySQL 备份 Xtrabackup
查看>>
mYSQL 外键约束
查看>>
mysql 多个表关联查询查询时间长的问题
查看>>
mySQL 多个表求多个count
查看>>
mysql 多字段删除重复数据,保留最小id数据
查看>>
MySQL 多表联合查询:UNION 和 JOIN 分析
查看>>
MySQL 大数据量快速插入方法和语句优化
查看>>