Python3 使用 SQLalchemy ORM 模型 upgrade 报错 max key length is 767 bytes

开发背景

公司使用 Flask 进行开发,使用 SQLalchemy ORM 模型,在开发环境中 migrateupgrade 正常通过,但是在部署测试环境的时候报了一行错误:

sqlalchemy.exc.OperationalError: (MySQLdb._exceptions.OperationalError) (1071, 'Specified key was too long; max key length is 767 bytes')

根据报错提示可知原因是:指定的密钥太长,最大密钥长度为767字节。这其实是在定义字段的时候,我加上了索引,导致在旧版本的 MySQL 中超出了索引字节的限制。

解决方案

启用系统变量 innodb_large_prefix,系统变量需满足一下几个条件:

1. 系统变量 innodb_large_prefix 为 ON
2. 系统变量 innodb_file_format 为 Barracuda
3. ROW_FORMAT为DYNAMIC 或 COMPRESSED

还有一种解决方案是使用前缀索引,但是在 SQLalchemy 中我没有找到使用前缀的方式,所以纯 SQL 建议使用前缀索引,SQLalchemy 就乖乖的使用上述的方案吧

参考文章:https://blog.csdn.net/noDr_butTry/article/details/90813327

发布了351 篇原创文章 · 获赞 280 · 访问量 116万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章