【问题标题】:Django, South: I get a warning with key length while indexingDjango,South:我在索引时收到关于密钥长度的警告
【发布时间】:2013-11-12 11:26:09
【问题描述】:

我的models.py有这个

category = models.CharField(max_length=1024, null=False)

我改成这样了:

category = models.CharField(max_length=256, null=False)

并成功迁移。

然后我把它改成这样:

category = models.CharField(max_length=256, null=False, db_index=True)

迁移时我明白了:

_mysql_exceptions.Warning: Specified key was too long; max key length is 767 bytes

迁移中断。

但是,当我打开 phpmyadmin 面板时,我看到索引已创建。

我应该关心吗?我应该做些什么来避免这个警告吗?这个警告重要吗?

编辑:字段排序规则是utf8_general_ci

【问题讨论】:

  • 为什么需要一个长度为 256 位的索引?
  • 有点奇怪。
  • 10^256 没有。的索引将由 256 位生成。您确定可以生成这么多数据吗?尝试更现实一点,这会浪费内存。而且这也不是一个好习惯。此链接可能会进一步帮助您。 stackoverflow.com/questions/4547479/…
  • 您使用哪种引擎? innodb 还是 myisam?
  • @xpanta 因为这是警告而不是错误。仍然仅为该列的前 767 个字节创建索引。

标签: python mysql django django-south


【解决方案1】:

根据 MySQL 5.6 文档:Limits on InnoDB Tables

默认情况下,单列索引的索引键最长可达 767 个字节。相同的长度限制适用于任何索引键前缀。

当您尝试指定比允许的更长的索引前缀长度时,长度会自动减少到非唯一索引的最大长度

对于唯一索引,超出索引前缀限制会产生错误。为避免复制配置出现此类错误,请避免在 master 上设置 innodb_large_prefix 选项,如果它也不能在从属上设置,并且从属具有可能受此限制影响的唯一索引。

【讨论】:

    猜你喜欢
    • 2023-03-31
    • 1970-01-01
    • 2020-04-15
    • 1970-01-01
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    • 2019-05-17
    • 1970-01-01
    相关资源
    最近更新 更多