【发布时间】:2015-09-07 06:20:23
【问题描述】:
我需要在现有的 Django/South/MySQL 应用程序中存储超过 255 个字符的 URL。这些 URL 用作外键。问题是排序规则是 UTF8,所以如果我将 URLField 的 max_length 增加到 512,我会收到以下错误:
'Specified key was too long; max key length is 767 bytes'
我猜原因是在 UTF8 中,每个字符可能有 3 个字节长,所以即使只有 256 个字符,我也可以超过限制。
由于 URL 应该只包含 ASCII 字符,因此我尝试在(数据)迁移中将特定表的排序规则更改为 ASCII,并且似乎效果很好:迁移后,我可以成功地将 max_length 更改为 512后续架构迁移并存储更长的 URL。
但是,在引导数据库时,我遇到的问题是它尝试设置数据库而不进行迁移:
syncdb --all
migrate --fake
syncdb,当然会失败,因为它再次尝试创建太长的外键(未运行调整数据库排序规则的迁移)。
如果我在没有 --all 的情况下同步db,(然后在没有 --fake 的情况下运行迁移),它会失败,说某些身份验证表不存在。
知道增加 max_length 限制的正确方法吗?
【问题讨论】:
标签: mysql django utf-8 django-south