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

zabbix5.0导入初始化数据报错:ERROR 1071 (42000) at line 348: Specified key was too long; max key length is 307 2、删除zabbix库,重新创建zabbix数据库,并指定字符集是:utf8。1、经过排查发现创建zabbix数据库的字符集是:utf8mb4。 阅读详情

 

今天节假日,有个学弟给我发消息说遇到这样的问题,ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes,有什么办法?这个问题蛮常见的了,小表基本不会遇到,只有那些varchar字段特别长的,或者有多个varchar字段,又要建立多个索引的表,才会遇到。

 

这个报错信息,是由于索引长度限制导致的,并不是字段长度限制,而是有一个系统参数innodb_large_prefix来控制的,我们先来官网上看看这个系统参数的介绍https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_large_prefix

这个是全局的系统参数,默认是是打开的,默认值是767types(最大可以调整到3072bytes),也就是说默认超过767,添加索引就会报错的,这个参数从mysql5.5版本引入的,但是5.6是默认关闭的,5.7里面是默认打开的,主要是用来禁用大型前缀索引,以便与不支持大索引键前缀的早期版本的InnoDB兼容。对于使用REDUNDANT或COMPACT行格式的InnoDB表,索引键前缀长度限制为767字节。例如,您可能会在TEXT或VARCHAR列上使用超过255个字符的列前缀索引达到此限制,假设为utf8mb3字符集,并且每个字符最多包含3个字节。尝试使用超出限制的索引键前缀长度会返回错误。要避免复制配置中出现此类错误,请避免在主服务器上启用enable innodb_large_prefix,适用于索引键前缀的限制也适用于全列索引键。

 

【备注】这里767不是字符数量,而是字节,字符集不同,字段能包容的长度就不同,比如拉汀latain是1字节,gbk是2字节,utf-8就是3字节。

 

innodb_large_prefix生效的话,需要满足下面几个条件:

1、系统变量innodb_large_prefix为ON

2、系统变量innodb_file_format为Barracuda

3、ROW_FORMAT为DYNAMIC或COMPRESSED

 

767报错之后如何解决这个问题,大概有以下方案:

1、调整innodb_large_prefix参数到

set global innodb_large_prefix=on;
set global innodb_file_format=Barracuda;

2、调整索引规则,使用前缀索引

ALTER TABLE TEST add index idx_cv(CODE_NAME(32));

 

不过在本地做测试的是,发现5.8里面已经没有这个参数了,索引建立也没有了字符长度的限制,看操作记录如下:

mysql> select @@version;
+-----------+
| @@version |
+-----------+
| 8.0.21    |
+-----------+
1 row in set (0.00 sec)

mysql> CREATE TABLE `TEST` (
    ->      `CODE_NAME` varchar(100) NOT NULL DEFAULT '',
    ->      `CODE_SEQ` smallint(6) NOT NULL DEFAULT '1',
    ->      `ACTIVE` char(1) DEFAULT 'Y',
    ->      `CODE_VALUE1` varchar(250) DEFAULT NULL,
    ->      PRIMARY KEY (`CODE_NAME`,`CODE_SEQ`),
    ->      KEY `IDX_GEN_CODE` (`CODE_NAME`,`CODE_VALUE1`)
    ->    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Query OK, 0 rows affected, 1 warning (0.09 sec)

mysql> ALTER TABLE TEST MODIFY CODE_VALUE1 VARCHAR(350);
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> alter table test add index idx_code(code_value1,code_name);
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show variables like 'innodb_large_prefix';
Empty set, 1 warning (0.34 sec)

mysql>
mysql> show variables like 'innodb_large_prefix';
Empty set, 1 warning (0.01 sec)

mysql>

 

视觉SLAM十四讲--第13讲 实践:设计SLAM系统(最详细的代码调试运行步骤) 最详细的代码调试运行避坑说明,也包含了我自己对代码的理解,如有理解错误的地方,欢迎指正交流。 阅读详情

相关推荐

Unity手游优化实战:用GPU Instancing把草地渲染的DrawCall从8000降到20(附完整Shader)

本文详细介绍了Unity手游中利用GPU Instancing技术优化草地渲染的实战方法,将DrawCall从8000降至20。通过Shader改造和性能优化技巧,开发者可以在移动端实现高效渲染,显著提升游戏性能。文章包含完整的Shader代码和优化策略,适合Unity开发者学习应用。

weixin_33691817的博客 488

MySQL 建索引时遇到 Specified key was too long; max key length is 767 bytes

遇到的问题 Specified key was too long; max key length is 767 bytes 今日在导入数据库时遇到了 Specified key was too long; max key length is 767 bytes错误

xiaozhegaa的博客 3万+

Centos7搭建OpenStack+创建iaas云主机

主要说明在控制节点和计算节点上,通过脚本的形式,安装OpenStack的iaas安装步骤和创建可运行的云主机。提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。

weixin_48218106的博客 1万+

mysql索引长度超过767bytes问题解决。Specified key was too long; max key length is 767 bytes

mysql索引长度超过767bytes问题解决。 错误信息: Specified key was too long; max key length is 767 bytes MySQL的InnoDB存储引擎的表存在一系列的限制条件,其中比较常见的一种是表的字段索引长度限制,该限制与参数innodb_large_prefix相关。 原因分析: 导致上面报错的原因是由于InnoDB表的索引长度限制,在MySQL5.6版本后引入了参数innodb_large_prefix可以解决这个问.

qq_24628659的博客 1万+

星网宇达Newton-M2设备安装及配置

主要介绍了星网宇达Newton-M2设备的配置过程

weixin_49353445的博客 2675

基于ESP32-C3的便携式血氧仪硬件与算法实现

血氧饱和度(SpO₂)监测是生理参数无创检测的核心技术之一,其原理基于光电容积脉搏波(PPG)信号中红光与红外光吸收比值的动态变化。该技术依赖高精度模拟前端、稳定光学激励及实时数字信号处理能力,在消费级健康设备中面临功耗、体积与测量鲁棒性的多重约束。ESP32-C3凭借集成LEDC、12位ADC与低功耗双核架构,成为PPG终端的理想主控平台;结合定制化指夹式光学探头与比率法血氧算法,可实现非诊断级但趋势可靠的日常健康监测。本文围绕硬件电路设计、电源管理策略与嵌入式信号处理流程展开,覆盖从LED驱动、跨阻放大

weixin_29025501的博客 132

Specified key was too long; max key length is 767 bytes问题解决

Specified key was too long; max key length is 767 bytes 在做一次mysql数据表迁移的时候碰到了这个问题。通过查阅资料和文档,这个问题的大致原因如下: 在mysql5.6中索引列的最大长度为767个字节。 简单讲,就是如果你将某列加入到索引中,而索引的内容大于767个字节,那么将会出现这个错误。 而对于一般建表来说,我们使用的多是in...

书山路遥 9万+

<IBM AIX> 《HACMP 实用手册和命令 HA切换手册》 - 鸿篇巨制,全网最全

操作命令检查磁盘预留策略要将磁盘预留策略更改为 no_reserve集群状态实用程序查看集群状态是否正常SMIT System Management (C-SPOC)Cluster ServicesShow Cluster Services 面板上的选项或 lssrc 命令查看资源组、资源组对应的VG、资源组对应的APPLICATION SERVER# ./cldispsmit常用命令F3退出F4列表Esc+6或者F6查看命令Esc+7或者F7选择多项检查状态。

Else 的博客 3361

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

<br />今天测试遇到了这样的问题:<br /> <br />mysql>  use test; create table test(a varchar(512) primary key, b varchar(1024));<br /> Database changed<br /> ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes<br /> <br />相关测试:<br />http://kklin

cindy9902的专栏 5万+

汇川Easy系列斜坡函数功能块(支持状态输出)

IN rSetValue REAL 0.000000 0.000000 不保持 目标值 1IN rMaxValue REAL 0.000000 0.000000 不保持 最大目标值 2IN rMinValue REAL 0.000000 0.000000 不保持 最小目标值 3IN rSmoothTime REAL 100.000000 100.0000 不保持 最小到最大值平滑时间 单位 秒 4IN diTs DINT 10 10 不保持 函数调用周期采样时间中断时间 5。

RXXW_Dor的博客 455

【AI智能体】QClaw 对接GitHub处理自动化任务实战操作详解

QClaw 对接GitHub处理自动化任务实战操作详解

congge 4867

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

主要记录下,今天mysql 5.6 版本数据导入mysql 5.7 版本报错: ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes 错误原因:表的索引长度达到了长度限制 对于innodb存储引擎,多列索引的长度限制如下: 每个列的长度不能大于767 bytes;所有组成索引列的长度和不能大于3072...

RenXiang_Code的博客 2323

【STK】手把手教你利用STK进行导弹和反导仿真01 - STK/MMT模块安装部署

【STK】手把手教你利用STK进行导弹和反导仿真01 - STK/MMT模块安装部署MMT模块与STK的版本是一一对应的,比如我现在手上的版本是MMT9的,那么我使用的STK的版本也必须是9版本的,如果你现在正在使用的是更高版本的STK,比如说10、11.2、11.6、12.2,那么该怎么办呢?这个经本人尝试,目前是可以多个STK版本共存的,我们可以根据自己的需要安装多个版本的STK下面开始讲解具体的安装步骤,

weixin_44184852的博客 2915

mysql5.6------ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes

转自 其他博客 原博客地址:https://www.cnblogs.com/kerrycode/p/9680881.html ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes 今天在MySQL 5.6版本的数据库中修改InnoDB表字段长度时遇到了"ERROR 1071 (42000): Spe...

noDr_butTry的博客 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

索引长度过长 ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes

1.发现问题 今天在修改innodb表的某个列的长度时,报如下错误: [html] view plain copy print? altertabletest2modifycolumnidvarchar(500); ERROR1071(42000):Specifiedkeywastoolong;maxk...

aobian2884的博客 1169

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

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

梦凝哲雪 2328

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【MySql】Specified key was too long; max key length is 767 bytes

问题报错信息“ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes”,其实意思就是“索引字段长度太长,超过了767bytes”。解决方法mysql的varchar索引字段只支持不超过767个字节或者768/2=384个双字节 或者767/3=255个三字节的字段 而GBK是双字节的,UTF8是三字节的...

Hyatt的博客 5198

MySQL 问题分析:ERROR 1071 (42000) : Specified key was too long; max key length is 767 bytes

在vs20017中进行EF数据迁移操作,数据库选择的是Mysql5.5的版本。在自动创建表的过程中,一直出现 超出索引列的最大长度767个字节 的问题。问题原因很简单,但是试了很多方法就是无法解决掉。 Add-Migration _Initial -Context IdentityDbContext Update-Database -Context IdentityDbContext 试过网...

weixin_40359716的博客 2156
上一篇: MySQL的explicit_defaults_for_timestamp参数问题
下一篇: mysql的skip-slave-start参数
林震南
博客等级 码龄8年 440粉丝 4418原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值