MySQL 创建索引报错

梦莱2年前技术文章972

创建索引报错

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

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

相关文章

PG的统计信息(二)

1.2.4 pg_statio_user_tables 指标含义通过对pg_statio_user_tables的查询,如果heap_blks_read,idx_blks_read很高说明shared...

详解迁云流程

详解迁云流程

一、现有云端环境梳理可以通过阿里云工单申请导出网络架构图,在图的信息上梳理阿里云现有架构二、制定迁移方案根据梳理的信息,确定实例迁移的方案,有夸账号迁移,跨地域迁移,IDC上云等不同场景。需要考虑的是...

Dockerfile全面指南:从基础到进阶,掌握容器化构建的核心工具

Dockerfile全面指南:从基础到进阶,掌握容器化构建的核心工具

引言        Dockerfile 是构建 Docker 镜像的核心文件。它定义了如何将应用程序及其依赖打包成一个可以跨平台运行的容器。本篇博客将从基础概...

performance_schema

performance_schema

performance_schema一、数据库支持情况1、performance_schema被视为存储引擎,如果该引擎可用,则应该 INFORMATION_SCHEMA.ENGINES 表或 sho...

kubernetes实战详解

kubernetes实战详解

一、k8s是什么?1、Kubernetes 是用于自动部署,扩展和管理容器化应用程序的开源系统2、生产级别的容器编排系统3、PaaS平台二、容器是什么?或者说docker是什么?1、容器就是一个沙箱C...

Linux操作系统启动流程

Linux操作系统启动流程

无论Windows还是Linux操作系统,启动之前都会对硬件进行检测,之后硬盘引导启动操作系统,下面是与启动系统相关的几个概念。BIOS基本输入输出系统 是一组固化到计算机主板上的只读内存镜...

发表评论    

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