开发背景
公司使用 Flask 进行开发,使用 SQLalchemy ORM 模型,在开发环境中 migrate
和 upgrade
正常通过,但是在部署测试环境的时候报了一行错误:
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
原文地址:https://blog.csdn.net/yilovexing
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。