Django中“ max_length”的最大大小是多少?


86

这是我的模型:

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参数的最大大小是多少?

Answers:


104

那取决于数据库后端。在Django的DB文件会告诉你,这max_length=255是保证始终工作。

如果您需要在问题中指定的数量,我建议使用TextField


2
在这种情况下,我为数据库使用它也将唯一选项限制为255,我个人坚持这样的口号:如果我需要一个大于255的CharField,则将其设为TextField。
digitaldreamer 2010年

13
TextField的最大大小也取决于数据库。对于MySQL,它大约有4万亿。
贾斯汀·阿布拉姆斯

2
在MySQL中,Charfield是一个varchar,最大65,535(但这也是最大行大小),请参见stackoverflow.com/questions/13506832/…。使用较大的最大大小不会有任何损失,MySQL将使用其实际需要的内容。请注意,文本字段的处理方式有所不同,这会影响性能,因此最好与另一个表中的其他字段建立索引(每个DB页的索引行越多越好),找到所需内容,然后使用现在已知的键获取文本字段。
Aviah Laor

2
虽然TextField对于255个以上的字符串来说是不错的选择,但它不会max_length在模型(或数据库)级别强制执行。与CharField的情况不同,这可能会使某些验证逻辑变得复杂,而CharField允许您指定max_lengthDjango确实要实施的逻辑。
elnygren

1
链接的段落说:“如果您对字段使用unique = True,则任何以VARCHAR列类型存储的字段的max_length限制为255个字符。这会影响CharField,SlugField。”
克里斯(Chris)


1

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

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

我在MySQL 5.7上面跑过


1
是否可以使用取决于已接受的答案中已提到的数据库后端。尽管这可行,但是更好的解决方案是使用TextField。
colidyre

0

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

如果您确实需要一个长字符串或不确定该变量将有多长,请务必放心使用variable=models.TextField()

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.