You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 02:28:42