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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章