因为带有utf8mb4字符集的VARCHAR(255)字段的大小最多为1020个字节。超过索引的767字节限制。简单的解决方法是将键/索引的大小限制为191 VARCHAR(764字节)。
1. 对数据库进行设置
set global innodb_file_format = BARRACUDA;
set global innodb_large_prefix = ON;
2. 对脚本进行修改,添加 ROW_FORMAT=DYNAMIC
例:
CREATE TABLE `categories` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`pid` int(11) unsigned DEFAULT '0',
`slug` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`thumb_url` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '缩略图',
`template` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT 'article' COMMENT '模板',
`sort` int(11) unsigned DEFAULT '0' COMMENT '排序',
`remark` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '备注',
`status` smallint(6) DEFAULT '1' COMMENT '状态',
`created_at` int(11) NOT NULL,
`updated_at` int(11) NOT NULL,
`deleted_at` int(11) NOT NULL DEFAULT '0',
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `slug` (`slug`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COLLATE=utf8mb4_unicode_ci;