赞
踩
[Err] 1709 - Index column size too large. The maximum column size is 767 bytes.
错误信息如下所示:
- [SQL]
-
- CREATE TABLE `permissions` (
- `role` varchar(50) NOT NULL,
- `resource` varchar(512) NOT NULL,
- `action` varchar(8) NOT NULL,
- UNIQUE INDEX `uk_role_permission` (`role`,`resource`,`action`) USING BTREE
- );
- [Err] 1709 - Index column size too large. The maximum column size is 767 bytes.
索引 “uk_role_permission” 的长度 4*255>767 ,
是由参数innodb_large_prefix 控制,
此参数控制索引前缀长度的,不开启最长的长度是 765byte,开启最长3072byte,一般出现此报错的数据库版本是小于MYSQL5.7,同时不同的版本开启的方式也略有不同。
1.1、set global innodb_large_prefix=on;
或 set global innodb_large_prefix=1;
show variables like "%innodb_large_prefix%"
1.2、set global innodb_file_format=Barracuda ;
set global innodb_file_format_max=Barracuda ;
修改后结果如下:
show variables like '%innodb_file_format%'
1.3、已经创建的表修改 row_format 的格式:
alter table table_name1 row_format=dynamic;
1.4、或者在创建表时指定row_format:
错误案例一:
CREATE TABLE `permissions` (
`role` varchar(50) NOT NULL,
`resource` varchar(512) NOT NULL,
`action` varchar(8) NOT NULL,
UNIQUE INDEX `uk_role_permission` (`role`,`resource`,`action`) USING BTREE
) row_format=dynamic;
错误案例二:
解决方法如下:
create table sys_dict_data
(
id bigint NOT NULL COMMENT 'id',
dict_type_id bigint NOT NULL COMMENT '字典类型ID',
dict_label varchar(255) NOT NULL COMMENT '字典标签',
dict_value varchar(255) COMMENT '字典值',
remark varchar(255) COMMENT '备注',
sort int unsigned COMMENT '排序',
creator bigint COMMENT '创建者',
create_date datetime COMMENT '创建时间',
updater bigint COMMENT '更新者',
update_date datetime COMMENT '更新时间',
primary key (id),
unique key uk_dict_type_value (dict_type_id, dict_value),
key idx_sort (sort)
)ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COMMENT='字典数据' row_format=dynamic;
innodb_large_prefix=1 (默认值 1)
innodb_default_row_format=dynamic (默认是dynamic)
innodb_file_format=Barracuda (默认值 Barracuda)
需要调整的参数的默认值是符合要求
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。