MySQL 创建索引报错

梦莱2年前技术文章896

创建索引报错

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

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

相关文章

HPA控制器

HPA控制器

HPA (动态扩缩容)kubectl 有一个 scale 命令 kubectl scale deployment/nginx --replicas=4 它可以帮助 Pod 进行扩缩容,这个过程完全手动...

数据库连接异常问题排查

数据库连接异常问题排查

问题描述客户反馈应用端连接数据库异常,报错截图如下:“已超过了锁请求超时时段”。问题排查1、测试端口联通性从应用侧服务器上分别测试数据库服务端口联通性,检测服务正常监听2、数据库服务器重启同客户沟通优...

MySQL启动优化

MySQL启动优化

安装后优化1.1 数据库启动问题因为是我们自己配置的参数文件所以启动时需要进行参数文件指定,但是很显然这样会很麻烦,所以我们把它加入到systemctl启动的服务中具体操作如下:[root@mysql...

Redis 持久化机制 AOF

Redis 持久化机制 AOF

前言Redis 有两种持久化机制,分别是 RDB 与 AOF 本篇文章将介绍 AOF 的执行过程与应用。1. AOF 简介AOF (Append only file) 持久化是以独立日志的方式记录每次...

PG体系结构(三)

PG体系结构(三)

四、物理结构4.1 软件安装目录bin             //二进制可执行文件 include         //头文件目录 lib             //动态库文件 share ...

at和corntab 计划任务

一、什么是计划任务每个人在生活当中或多或少都有一些工作,有的工作是按照一定周期循环的, 例如每天固定时间的闹铃、工作打卡等等; 有的工作则是临时发生的,例如刚好有亲友到访,需要你在一个特定的时间去车站...

发表评论    

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