MovableType 7 安装错误: Specified key was too long

在尝试安装 MovableType 7 的时候,一路顺利,到最后初始化数据库的时候,出现了一个错误。

Error during installation: failed to execute statement ALTER TABLE mt_ts_funcmap ADD CONSTRAINT mt_ts_funcmap_funcname UNIQUE (ts_funcmap_funcname): Specified key was too long; max key length is 767 bytes at lib/MT/Upgrade.pm line 839, line 1662.

如何修复这个错误?

简单而言就是修改数据库的 collection 参数。

MariaDB 10.1 的默认安装后,其数据库的默认 collection 是 utf8mb4_general_ci,偶尔在某些系统安装时会出现上面的错误情况。

最方便的办法,就是在安装 MovableType 7 之前,在添加数据库后,先把数据库的 collection 修改成 utf8_general_ci,修改的方法,有手工的,有使用 phpmyadmin,都可以。

如果你在网上搜索,Specified key was too long; max key length is 767 bytes,有很多种解释和所谓解决方法。比如 innodb_file_format,innodb_file_per_table,row_format, innodb_large_prefix 各种参数修改。对于 MovableType 7 的安装来说,都没有效果,唯有上面修改 collection 才是真正解决的方法。

安装 MovableType 7 成功后的界面是下面这样。

Update:

特地在 MovableType 6.3.7 的全新安装,当数据库的 collection 也是 utf8mb4_general_ci 时,同样在初始化数据库时出现下面错误。

把数据库 collection 改成 utf8_general_ci 之后,点击安装,就没有问题了。