使用ddev import-db导入TYPO3 9生产库遇MySQL索引列大小错误求方案
解决ddev导入TYPO3 9数据库时的“Index column size too large”错误
遇到这个问题确实挺闹心的,不过不用动生产站点、数据库或者修改表结构就能搞定,我给你两个可行的方案:
方案1:开启MySQL大前缀支持,适配utf8mb4字符集
这个方案不用改字符集,直接让MySQL允许更大的索引长度,完美适配ddev默认的utf8mb4环境:
- 在你的ddev项目根目录下,创建
.ddev/mysql文件夹(如果还没存在的话) - 新建一个
my.cnf文件放在这个文件夹里,内容如下:
[mysqld] innodb_large_prefix = ON innodb_file_format = Barracuda innodb_file_per_table = ON
- 重启ddev服务:
ddev restart - 重新导入数据库:
ddev import-db --src=path/to/your/dump.sql
为啥这能行?因为utf8mb4每个字符占4字节,原来的767字节限制最多只能容纳191个字符,而生产库的索引列可能是varchar(255),用utf8(3字节)没问题,但到utf8mb4就超了。开启这些配置后,InnoDB支持的最大索引长度会提升到3072字节,足够容纳255个utf8mb4字符的索引了。
方案2:让ddev的MySQL默认使用utf8字符集
如果不想折腾大前缀配置,直接让ddev的MySQL和生产环境保持一致的字符集也是个好办法:
- 同样在
.ddev/mysql文件夹下创建my.cnf,内容改成:
[mysqld] character-set-server=utf8 collation-server=utf8_general_ci [client] default-character-set=utf8
- 重启ddev服务:
ddev restart - 重新导入数据库:
ddev import-db --src=path/to/your/dump.sql
这样ddev的MySQL就会用和生产端一样的utf8字符集,索引列的字节数计算逻辑完全一致,自然就不会触发“索引列过大”的错误了。
这两个方案都是在本地ddev环境调整,完全不会影响生产环境。之后如果需要切换回utf8mb4,只需要删除或修改.ddev/mysql/my.cnf,再重启ddev就行。
内容的提问来源于stack exchange,提问作者rfay
相关产品推荐
相关产品推荐

