Neos 4.0.x安装失败:执行建表SQL时遇1071键过长错误
解决Neos安装时碰到的SQL键过长错误
嘿,这个问题我之前帮朋友排查过,太熟悉了!咱们先理清楚问题,再给你俩靠谱的解决办法。
先看看你碰到的具体报错
安装Neos时弹出的异常是这样的:
执行SQL语句
CREATE TABLE flow3_resource_resourcepointer (hash VARCHAR(255) NOT NULL, PRIMARY KEY(hash)) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB时发生异常:SQLSTATE[42000]: 语法错误或访问违规: 1071 指定的键过长;最大键长度为767字节。
为啥会出这个错?
说白了就是字符集和索引长度的冲突:你用的utf8mb4字符集每个字符最多占4个字节,而VARCHAR(255)算下来总字节数是255×4=1020,超过了InnoDB默认单列索引最大767字节的限制,数据库自然就报错了。
两种解决办法,任你选
办法1:改字段长度,简单直接
既然767除以4等于191.75,那咱们把hash字段的长度改成VARCHAR(191)就刚好适配了(191×4=764,没超限制)。你可以手动执行这条修改后的SQL来创建表:
CREATE TABLE flow3_resource_resourcepointer ( hash VARCHAR(191) NOT NULL, PRIMARY KEY(hash) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB;
跑完这条SQL,再继续Neos的安装流程就行。
办法2:开启InnoDB大索引支持(适合新一点的数据库版本)
要是不想改字段长度,那可以调整数据库配置,把索引长度限制放宽。不过这个要求你的MySQL版本在5.7.7以上,或者MariaDB在10.2.2以上:
- 找到你的数据库配置文件(一般叫
my.cnf或者my.ini) - 在
[mysqld]区块里加这几行配置:
[mysqld] innodb_large_prefix = on innodb_file_format = barracuda innodb_file_per_table = on
- 重启数据库服务,然后重新跑Neos的安装就行。
额外提醒
要是你用的是比较老的数据库版本(达不到上面的版本要求),那办法2用不了,优先选办法1,或者考虑升级下数据库版本,毕竟旧版本也有安全隐患嘛。
内容的提问来源于stack exchange,提问作者jalieb
相关产品推荐
相关产品推荐

