首次安装VBulletin 5.4.0遇数据库错误1071,请求技术协助
解决vBulletin安装时创建userchangelog表的1071索引长度错误
我碰到过好几个用户在vBulletin首次安装时遇到这个问题,核心原因是MySQL的索引长度限制——尤其是当你的数据库用的是MyISAM引擎时,它对索引的总长度有1000字节的上限,而vBulletin默认的userchangelog表创建语句刚好踩了这个坑。具体来说,userid(INT类型,占4字节)和fieldname(VARCHAR(250))组成的复合索引,在utf8mb4字符集下(每个字符占4字节)总长度是250*4 +4=1004,超过了1000字节的限制,所以触发了1071错误。
下面是几个可行的解决方法,按推荐程度排序:
方法1:改用InnoDB引擎(推荐)
InnoDB引擎的索引长度限制宽松很多(MySQL 5.7+开启innodb_large_prefix后支持到3072字节),完全能容纳默认的索引长度。操作步骤如下:
- 打开你的数据库管理工具(比如phpMyAdmin),选中vBulletin要安装的目标数据库。
- 执行下面的SQL语句手动创建
userchangelog表:
CREATE TABLE userchangelog ( changeid INT UNSIGNED NOT NULL AUTO_INCREMENT, userid INT UNSIGNED NOT NULL DEFAULT '0', fieldname VARCHAR(250) NOT NULL DEFAULT '', newvalue TEXT NOT NULL, oldvalue TEXT NOT NULL, changetime INT UNSIGNED NOT NULL DEFAULT '0', changerid INT UNSIGNED NOT NULL DEFAULT '0', changetype ENUM('profile','moderation') NOT NULL DEFAULT 'profile', PRIMARY KEY (changeid), KEY userid (userid, fieldname), KEY changerid (changerid), KEY changetime (changetime) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
- 回到vBulletin安装页面,刷新后继续安装,系统会检测到表已存在,自动跳过创建步骤。
如果你的MySQL版本低于5.7,需要先开启innodb_large_prefix参数,执行以下SQL:
SET GLOBAL innodb_large_prefix = ON; SET GLOBAL innodb_file_format = Barracuda; SET GLOBAL innodb_file_per_table = ON;
然后再执行上面的建表语句。
方法2:调整字段长度适配MyISAM
如果你坚持要用MyISAM引擎,可以把fieldname的长度从250调整为249,这样复合索引的总长度刚好是249*4+4=1000,符合MyISAM的限制:
- 在数据库管理工具中执行修改后的建表语句:
CREATE TABLE userchangelog ( changeid INT UNSIGNED NOT NULL AUTO_INCREMENT, userid INT UNSIGNED NOT NULL DEFAULT '0', fieldname VARCHAR(249) NOT NULL DEFAULT '', newvalue TEXT NOT NULL, oldvalue TEXT NOT NULL, changetime INT UNSIGNED NOT NULL DEFAULT '0', changerid INT UNSIGNED NOT NULL DEFAULT '0', changetype ENUM('profile','moderation') NOT NULL DEFAULT 'profile', PRIMARY KEY (changeid), KEY userid (userid, fieldname), KEY changerid (changerid), KEY changetime (changetime) ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
- 完成后继续vBulletin的安装流程即可。
方法3:临时切换字符集为utf8
utf8字符集每个字符占3字节,250*3+4=754,远低于1000字节的限制。你可以先把数据库字符集临时改成utf8,安装完成后再转换回utf8mb4(注意要同步转换所有表的字符集):
- 在数据库管理工具中修改目标数据库的字符集为utf8。
- 回到vBulletin安装页面继续安装,此时创建表不会触发索引长度错误。
- 安装完成后,再将数据库和所有表的字符集转换回utf8mb4。
内容的提问来源于stack exchange,提问作者Yasir Rehman
相关产品推荐
相关产品推荐

