Qual è la dimensione massima di "max_length" in Django?


87

Questo è il mio modello:

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)

Ma non può funzionare. Qual è la dimensione massima del max_lengthparametro?

Risposte:


106

Dipende dal backend del database. Il Django DB Documenti vi dirà, che max_length=255è garantito per funzionare sempre.

Se hai bisogno di qualcosa dell'importo che hai specificato nella tua domanda, ti suggerisco di utilizzare un TextField .


2
Stando così le cose insieme al fatto che per il DB lo uso limita anche l'opzione unica a 255, personalmente mi attengo al mantra che se ho bisogno di un CharField più grande di 255 lo faccio un TextField.
digitaldreamer

13
Anche la dimensione massima di TextField dipende dal DB. Per MySQL, è da qualche parte intorno ai 4 trilioni.
Justin Abrahms

2
In MySQL Charfield è un varchar, massimo 65.535 (ma questa è anche la dimensione massima della riga), vedere stackoverflow.com/questions/13506832/… . Non vi è alcuna penalità nell'usare una dimensione massima di grandi dimensioni, MySQL utilizzerà ciò di cui ha effettivamente bisogno. Nota che i campi di testo vengono gestiti in modo diverso, con implicazioni sulle prestazioni, quindi è meglio indicizzare con altri campi in un'altra tabella (più righe indicizzate per pagina DB, meglio è), trova quello che ti serve, quindi con la chiave ormai nota ottieni il campo di testo.
Aviah Laor

2
Sebbene TextField sia una scelta accettabile per> 255 stringhe, non si applica max_lengtha livello di modello (o database). Ciò potrebbe complicare alcune logiche di convalida a differenza del caso di CharField che consente di specificare un elemento max_lengthche Django impone.
elnygren

1
Il paragrafo collegato dice: "Tutti i campi archiviati con i tipi di colonna VARCHAR hanno la loro lunghezza massima limitata a 255 caratteri se si utilizza unique = True per il campo. Ciò influisce su CharField, SlugField."
Chris


1

Dipende dal database di backend. Se usi MySQL 5.6, c'è un limite di 65.535. Se stai usando sopra di quello, consentirà anche 1024 ma non oltre.

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

Ho eseguito sopra su MySQL 5.7


1
Se questo funzionerà dipende dal backend del database utilizzato come già menzionato nella risposta accettata. Anche se questo potrebbe funzionare, una soluzione migliore è usare TextField.
colidyre

0

Dipende davvero dal database utilizzato per il modello. PostgreSQL, MySQL e così via hanno impostazioni e limiti diversi.

Se hai davvero bisogno di una stringa lunga o non sei sicuro di quanto sarebbe lunga la variabile, puoi sempre procedere con sicurezza variable=models.TextField().

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.