MySQL 创建索引报错

梦莱2年前技术文章1012

创建索引报错

添加索引发现报错,具体报错如下:

create unique index sm_sample_clothing_skc_SkcUniqueKey_uindex on sm_sample_clothing_skc (SkcUniqueKey)

报错信息: 1071 - Specified key was too long; max key length is 767 bytes

可以通过修改参数 innodb_large_prefix=on 避免报错

原因:由于MySQL的InnoDB引擎表索引字段长度的限制为767字节,因此对于多字节字符集的大字段或者多字段组合,创建索引时会出现该问题;以utf8mb4字符集字符串类型字段为例。utf8mb4是4字节字符集,默认支持的索引字段最大长度是191字符(767字节/4字节每字符191字符),因此在varchar(255)或char(255)类型字段上创建索引会失败。

修改后有可能直接成功,还有可能报如下错误:

报错信息:1709 - Index column size too large. The maximum column size is 767 bytes.

show table status like 'a'\G
alter table <表名> row_format=dynamic;
alter table <表名> row_format=compressed;

该报错表示还是不可以,那有可能就是 row_format 问题。Innodb表的行记录格式是 Dynamic 或 Compressed 的前提下修改参数才会有效,而 mysql 5.6 默认 row format 是 compact 模式。mysql 5.7 开始 row format 是默认模式修改为 Dynamic,所以 mysql 5.7 一般都可以,但 5.6 有可能不行。

相关文章

开源大数据集群部署(八)Ranger编译部署

开源大数据集群部署(八)Ranger编译部署

在hd1.dtstack.com主机root权限下操作。1、 编译rangerranger二进制包编译过程在本次过程中不做详细说明。简单说明如下:Ø  在pom.xml中更改对应hadoop集群组件版...

Python 识别 MySQL 中的冗余索引

前言最近在搞标准化巡检平台,通过 MySQL 的元数据分析一些潜在的问题。冗余索引也是一个非常重要的巡检目,表中索引过多,会导致表空间占用较大,索引的数量与表的写入速度与索引数成线性关系(微秒级),如...

开源大数据集群部署(二十二)Flink on yarn部署

开源大数据集群部署(二十二)Flink on yarn部署

flink on yarn部署(每个节点)cd  /root/bigdata/ tar -xzvf  flink-1.14.6-bin-scala_2.12.tgz -C /opt/  ln -s...

HDP部署Tez UI

HDP部署Tez UI

首先部署tomcat在官网下载apache-tomcat-9.0.22.tar.gz[root@hdp02 opt]# wget https://archive.apache.org/dist/tom...

shell脚本-expect

shell脚本-expect

一、概述       Expect是建立在tcl基础上的一个工具,Expect 是用来进行自动化控制和测试的工具。主要解决shell脚本中不可交互的问题。       在一些需要交互输入指令的场景下,...

HBase基本架构

HBase基本架构

架构角色: (1)Master Master 是所有 RegionServer 的管理者,负责监控集群中所有的 RegionServer 实例。主要作用如下: 管理元数据表格 hbase:meta,接...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。