【问题标题】:What is the max size of 'max_length' in Django?Django中'max_length'的最大尺寸是多少?
【发布时间】:2011-02-05 13:53:44
【问题描述】:

这是我的模型:

class Position(models.Model):
    map = models.ForeignKey(Map,primary_key=True)
    #members=models.CharField(max_length=200)
    LatLng = models.CharField(max_length=40000)
    infowindow = models.CharField(max_length=40000)

但它无法运行。 max_length 参数的最大大小是多少?

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    改用TextField

    infowindow = models.TextField()
    

    【讨论】:

    • 请注意 TextField 不会在数据库级别验证 max_length
    【解决方案2】:

    这实际上取决于您用于模型的数据库。 PostgreSQL、MySQL 等有不同的设置和限制。

    如果您确实需要一个长字符串或不确定变量的长度,请始终使用variable=models.TextField()

    【讨论】:

      【解决方案3】:

      这取决于后端数据库。如果您使用 MySQL 5.6,则限制为 65,535。如果您在上面使用,那么它也将允许 1024,但不会超出此范围。

      class Demo(models.Model):
          max_test = models.CharField(max_length=1024)
      

      我在 MySQL 5.7 上运行

      【讨论】:

      • 这是否可行取决于已接受的答案中已经提到的所使用的数据库后端。虽然这可行,但更好的解决方案是使用 TextField。
      【解决方案4】:

      这取决于数据库后端。 Django DB Docs 会告诉您,max_length=255 保证始终有效。

      如果您需要问题中指定的金额,我建议您使用TextField

      【讨论】:

      • 在这种情况下,再加上我使用的 DB 也将唯一选项限制为 255,我个人坚持认为,如果我需要一个大于 255 的 CharField,我将其设为 TextField。
      • TextField 的最大大小也取决于数据库。对于 MySQL,它大约是 4 万亿。
      • 在 MySQL 中 Charfield 是一个 varchar,最大 65,535(但这也是最大行大小),请参阅 stackoverflow.com/questions/13506832/…。使用大的最大大小没有任何惩罚,MySQL 将使用它实际需要的大小。请注意,Textfields 的处理方式不同,会影响性能,因此最好使用另一个表中的其他字段进行索引(每个 DB 页的索引行越多越好),找到您需要的内容,然后使用现在已知的键获取 Textfield。
      • 虽然 TextField 对于 >255 个字符串是一个不错的选择,但它不会在模型(或数据库)级别强制执行 max_length。这可能会使某些验证逻辑复杂化,这与 CharField 不同,它允许您指定 Django 强制执行的 max_length
      • 链接的段落说:“使用 VARCHAR 列类型存储的任何字段的 max_length 限制为 255 个字符,如果您对字段使用 unique=True。这会影响 CharField、SlugField。”跨度>
      猜你喜欢
      • 2015-01-22
      • 2012-09-30
      • 2011-07-25
      • 1970-01-01
      • 2011-10-12
      • 2013-04-13
      • 2021-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多