MySQL 创建索引报错

梦莱2年前技术文章692

创建索引报错

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

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 8.0 新特性:Persisted System Variables

MySQL 8.0 新特性:Persisted System Variables

一、前言MySQL 5.7 之前我们修改参数变量后,需要将其手动写入到服务端配置文件中,否则重启后又恢复原有的配置,在 8.0 中可以在 MySQL 客户端直接将参数持久化,节省在服务器操作的步骤,下...

Hbase 存储相关知识

1.Hbase的写流程Client 写入-> 存入MemStore,一直到MemStore 满-> Flush 成一个StoreFile,直至增长到一定阈值-> 触发Compact...

MySQL运维实战(7)建立复制

建立复制的基本步骤1、主库开启binlog主库需要配置的关键参数server_id:主备库需要设置为不同。log_bin:binlog文件的前缀,可以指定绝对路径,也可以只指定文件名。若不指定路径,b...

CDP实操--集群配置Kerberos

CDP实操--集群配置Kerberos

1.1检查IPA设置以及配置Kerberos前提条件登录IPA Server在services页面里都是ipa自带的服务,集群配置完kereros后,这里会增加集群里各项hadoop服务。在host页...

Redis 热 key

1、hotkeys该方案只能针对于 key 的过期淘汰策略为 allkeys-lfu 或者 volatile-lfu 的实例。-----查看淘汰策略 config get maxmemory-pol...

ES部署以及扩容

ES部署以及扩容

单节点RPM包方式部署1、下载RPM包官网下载地址:Download Elasticsearch | Elastic默认下载的为最新版本,如果想要下载历史版本,点击此处查看历史版本此处安装ES7.X...

发表评论    

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