Django中'max_length'的最大大小是多少?

113

这是我的模型:

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

5个回答

138

这取决于数据库后端。 Django DB文档会告诉你,max_length=255始终可以使用。

如果你需要指定的长度,我建议使用TextField


2
考虑到这种情况,再加上我使用的数据库也将唯一选项限制为255个字符,因此我个人坚持这样的信条:如果我需要一个大于255个字符的CharField,我会将其设为TextField。 - digitaldreamer
13
文本框的最大大小也取决于数据库。对于MySQL来说,它大约是4万亿。 - Justin Abrahms
2
在MySQL中,Charfield是一个varchar,最大长度为65,535(但这也是最大行大小),请参见https://dev59.com/WmYr5IYBdhLWcg3wpbyQ。使用更大的 max size 不会有任何惩罚,MySQL将使用它实际需要的。请注意,Textfields的处理方式不同,会影响性能,因此最好在另一张表中使用其他字段进行索引(每个数据库页面上索引的行数越多越好),找到所需内容,然后通过已知的键获取Textfield。 - Aviah Laor
2
虽然TextField对于长度小于255的字符串是一个不错的选择,但它并没有在模型(或数据库)层面上强制执行max_length。这可能会使一些验证逻辑变得复杂,而CharField则允许您指定Django强制执行的max_length - elnygren
1
链接的段落表示:“如果您为字段使用unique=True,则存储在VARCHAR列类型中的任何字段的max_length将受到255个字符的限制。这会影响CharField、SlugField。” - Chris
显示剩余2条评论

8
请使用 TextField 替代。
infowindow = models.TextField()

7
请注意,TextField 不会在数据库层面验证 max_length - Chris Conlan

2
这取决于后端数据库。如果使用MySQL 5.6,则限制为65,535。如果使用更高版本,则允许1024,但不超过此限制。
class Demo(models.Model):
    max_test = models.CharField(max_length=1024)

我在MySQL 5.7上运行了上述代码。


1
这是否能够正常工作取决于所使用的数据库后端,如已在接受的答案中提到。虽然这可能有效,但更好的解决方案是使用TextField。 - colidyre

2

Django文档中得知:

使用 unique=True 来存储具有 VARCHAR 列类型的任何字段,如果你将它们的 max_length 限制为 255 个字符,那么这将会影响到 CharFieldSlugField等。详情请参见MySQL文档

如果一个 CharField 是唯一的,则其 max_length 为 255 个字符。否则,在 MySQL 的 VARCHAR 中,其 max_length 为65535个字符。


2

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接