Index column size too large. The maximum column size is 767 bytes.

创建索引的时候报错 :Index column size too large. The maximum column size is 767 bytes.

错误原因

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

解决办法

被创建索引的列类型最大值超过了索引要求的最大长度。可修改将被创建为索引列的字段的类型长度。也可对数据库进行修改


CREATE TABLE oauth_client_details
(
    client_id               VARCHAR(256) NOT NULL COMMENT '客户端ID',
    resource_ids            VARCHAR(256) COMMENT '资源ID集合,多个资源时用逗号(,)分隔',
    client_secret           VARCHAR(256) COMMENT '客户端密匙',
    scope                   VARCHAR(256) COMMENT '客户端申请的权限范围',
    authorized_grant_types  VARCHAR(256) COMMENT '客户端支持的grant_type',
    web_server_redirect_uri VARCHAR(256) COMMENT '重定向URI',
    authorities             VARCHAR(256) COMMENT '客户端所拥有的Spring Security的权限值多个(,)分隔',
    access_token_validity   INTEGER COMMENT '访问令牌有效时间值(单位:秒)',
    refresh_token_validity  INTEGER COMMENT '更新令牌有效时间值(单位:秒)',
    additional_information  VARCHAR(4096) COMMENT '预留字段',
    autoapprove             VARCHAR(256) COMMENT '用户是否自动Approval操作',
    CONSTRAINT pk_oauth_client_details_client_id PRIMARY KEY (client_id)
) COMMENT '客户端信息';

上面的sql会报该错误。原因是client_id字段的长度是256,而又将client_id设为了主键(默认主键为索引),超出了索引所规定的最大长度。

修改字段

 client_id               VARCHAR(64) NOT NULL COMMENT '客户端ID',

修改数据库

set global innodb_file_format = BARRACUDA

set global innodb_large_prefix = ON

你可能感兴趣的:(Index column size too large. The maximum column size is 767 bytes.)