Qual é o tamanho máximo de 'max_length' no Django?

86

Este é o meu modelo:

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)

Mas não pode funcionar. Qual é o tamanho máximo do max_lengthparâmetro?

zjm1126
fonte

Respostas:

104

Isso depende do back-end do banco de dados. O Django DB Docs lhe dirá que max_length=255sempre funcionará com certeza.

Se você precisar de algo do valor que especificou em sua pergunta, sugiro usar um TextField .

Haes
fonte
2
Sendo este o caso, juntamente com o fato de que para o DB eu o uso, também limita a opção única a 255, eu pessoalmente mantenho o mantra de que se eu precisar de um CharField maior que 255 eu o tornarei um TextField.
digitaldreamer
13
O tamanho máximo de TextField também depende do DB. Para o MySQL, é algo em torno de 4 trilhões.
Justin Abrahms,
2
No MySQL, Charfield é um varchar, no máximo 65.535 (mas também é o tamanho máximo da linha), consulte stackoverflow.com/questions/13506832/… . Não há nenhuma penalidade em usar um tamanho máximo grande, o MySQL usará o que realmente precisa. Observe que Textfields são tratados de forma diferente, com implicações de desempenho, então é melhor indexar com outros campos em outra tabela (quanto mais linhas indexadas por página de banco de dados, melhor), encontre o que você precisa e, em seguida, com a chave agora conhecida, obtenha o Textfield.
Aviah Laor
2
Embora TextField seja uma escolha aceitável para> 255 strings, ele não aplica max_lengthno nível do modelo (ou banco de dados). Isso pode complicar alguma lógica de validação ao contrário do caso do CharField, que permite que você especifique um max_lengthque o Django impõe.
elnygren
1
O parágrafo vinculado diz: "Quaisquer campos que são armazenados com tipos de coluna VARCHAR têm seu max_length restrito a 255 caracteres se você estiver usando unique = True para o campo. Isso afeta CharField, SlugField."
Chris
5

Use ao TextFieldinvés

infowindow = models.TextField()
tshubham7
fonte
2
Cuidado, isso TextFieldnão valida max_lengthno nível do banco de dados.
Chris Conlan
1

Depende do banco de dados de backend. Se você usar o MySQL 5.6, haverá um limite de 65.535. Se você estiver usando acima disso, ele permitirá 1024 também, mas não além disso.

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

Corri acima no MySQL 5.7

Vitthal Sarode
fonte
1
Se isso vai funcionar depende do backend do banco de dados usado, conforme já mencionado na resposta aceita. Embora isso possa funcionar, uma solução melhor é usar TextField.
colidyre
0

Realmente depende do banco de dados que você usa para o modelo. PostgreSQL, MySQL e assim por diante têm configurações e limites diferentes.

Se você realmente precisa de uma string longa ou não tem certeza de quanto tempo a variável teria, sempre é seguro acompanhá-la variable=models.TextField().

Adrian Stanica
fonte