MySQL 创建索引报错

梦莱2年前技术文章839

创建索引报错

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

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 有可能不行。

相关文章

mysql部署

安装前准备创建用户和目录创建用户:groupadd mysqluseradd -g mysql mysql 创建目录mkdir /data/mysqlmkdir /log/mysql添加环境变量vim...

开源大数据集群部署(四)Freeipa部署(kerberos+ldap)

开源大数据集群部署(四)Freeipa部署(kerberos+ldap)

1、 FreeIPA介绍Kerberos协议只是一种协议标准的框架,而MIT Kerberos则是实现了该协议的认证服务,是Kerberos的物理载体。将它与Hadoop服务进行集成便能够很好地解决安...

MySQL keepalived配置(一)

一、MySQL数据初始化1.1、创建ha元数据结构:create database myha;  use myha;CREATE TABLE `ha_conf` ( `id` int(11) NOT...

HDP部署Tez UI

HDP部署Tez UI

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

CDH-集群节点下线

CDH-集群节点下线

1、前期准备确认下线节点确认节点组件信息确认下线节点数据存储大小确定剩余节点存储大小如果下线节点数据存储大小大于剩余节点存储大小,则不能进行下线,可能存在数据丢失的情况2、操作首先确认待下线节点中是否...

大数据集群部署规划(二)硬件配置要求

CPU(虚拟机建议配置*2)X86服务器:最低配置:双路4核Intel处理器。推荐配置:双路8核Intel处理器。ARM服务器:双路32核ARM处理器Bit-mode64位内存(虚拟机不建议超分)物理...

发表评论    

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