今天在mysql创建表时出现 Index column size too large. The maximum column size is 767 bytes.
建表的sql:
CREATE TABLE `t_sys_user_token` (
`token` varchar(500) NOT NULL COMMENT 'token',
`expire_time` datetime DEFAULT NULL COMMENT '过期时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`user_id`),
UNIQUE KEY `token` (`token`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='系统用户Token';
原因是token这个索引列太大了,超出了mysql的默认索引大小767 bytes,网上搜索说是
对数据库进行设置
set global innodb_file_format = BARRACUDA
set global innodb_large_prefix = ON
按部就班试了下,果不其然失败了,后通过分析mysql配置
在建表时添加 ROW_FORMAT=DYNAMIC,如果有小伙伴项具体了解,那就自己慢慢查一查各参数的含义吧,下面是建表修改后的示例
CREATE TABLE `t_sys_user_token` (
`token` varchar(500) NOT NULL COMMENT 'token',
`expire_time` datetime DEFAULT NULL COMMENT '过期时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`user_id`),
UNIQUE KEY `token` (`token`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='系统用户Token';
成功了;