今天在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配置mysql5.7数据库建表时异常提示

在建表时添加 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';

成功了;

相关文章:

  • 2022-02-04
  • 2022-12-23
  • 2021-11-17
  • 2021-12-12
  • 2021-10-12
  • 2021-11-03
猜你喜欢
  • 2022-12-23
  • 2022-02-03
  • 2021-12-04
  • 2022-01-29
  • 2021-08-18
  • 2021-12-19
相关资源
相似解决方案