PHP项目迁移遇MySQL 1071错误,如何修改my.ini解决?
解决MySQL 1071索引长度超限问题(无需修改迁移脚本)
绝对可以!不用动你的迁移脚本,调整MySQL的my.ini配置就能搞定这个1071 Specified key was too long错误,我给你详细拆解方案:
为什么会出这个错?
你已经找对了根源:varchar(512)搭配utf8字符集时,每个字符占3字节,光username就占了512*3=1536字节,再加上user_id的8字节,联合主键的总长度远超InnoDB默认的767字节索引上限,所以触发了报错。
要改哪些配置?
打开你的my.ini(Windows系统)或my.cnf(Linux系统),找到[mysqld]段落,添加以下配置:
[mysqld] # 允许InnoDB使用最长3072字节的索引前缀 innodb_large_prefix = 1 # 开启独立表空间(这是innodb_large_prefix生效的前提) innodb_file_per_table = 1 # 启用支持大索引的Barracuda文件格式 innodb_file_format = Barracuda
接下来怎么做?
- 保存配置文件后,必须重启MySQL服务,否则新配置不会生效。
- 重新运行你的PHP迁移脚本,这次建表语句应该能顺利执行了。
额外提醒
- 如果你用的是MySQL 5.7.7及以后的版本,
innodb_large_prefix默认已经是开启状态,你只需要确认innodb_file_per_table(一般默认也是ON)和innodb_file_format的配置就行。 - 如果之前已经尝试建表失败,记得先把残留的空表删掉再重新跑迁移,避免重复报错。
内容的提问来源于stack exchange,提问作者user8836137
相关产品推荐
相关产品推荐

