Was ist die maximale Größe von 'max_length' in Django?

85

Das ist mein Modell:

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)

Aber es kann nicht laufen. Was ist die maximale Größe des max_lengthParameters?

zjm1126
quelle

Antworten:

103

Das hängt vom Datenbank-Backend ab. Die Django DB Docs werden Ihnen sagen, dass dies max_length=255garantiert immer funktioniert.

Wenn Sie etwas von dem Betrag benötigen, den Sie in Ihrer Frage angegeben haben, würde ich empfehlen, ein TextField zu verwenden .

Haes
quelle
2
Da dies der Fall ist, verbunden mit der Tatsache, dass ich für die von mir verwendete Datenbank auch die einzigartige Option auf 255 beschränke, halte ich mich persönlich an das Mantra, dass ich, wenn ich ein CharField benötige, das größer als 255 ist, es zu einem TextField mache.
Digitaldreamer
13
Die maximale Größe von TextField ist auch DB-abhängig. Für MySQL sind es ungefähr 4 Billionen.
Justin Abrahms
2
In MySQL ist Charfield ein Varchar, maximal 65.535 (dies ist jedoch auch die maximale Zeilengröße ), siehe stackoverflow.com/questions/13506832/… . Es gibt keine Strafe für die Verwendung einer großen maximalen Größe. MySQL verwendet das, was es tatsächlich benötigt. Beachten Sie, dass Textfelder mit Auswirkungen auf die Leistung unterschiedlich behandelt werden. Daher ist es besser, mit anderen Feldern in einer anderen Tabelle zu indizieren (je mehr indizierte Zeilen pro DB-Seite, desto besser), das zu finden, was Sie benötigen, und dann mit dem jetzt bekannten Schlüssel das Textfeld abzurufen.
Aviah Laor
2
TextField ist zwar eine gute Wahl für> 255 Zeichenfolgen, wird jedoch max_lengthauf Modellebene (oder Datenbankebene) nicht erzwungen . Dies kann im Gegensatz zu CharField eine Validierungslogik erschweren, mit der Sie eine angeben können max_length, die Django erzwingt.
elnygren
1
Der verknüpfte Absatz lautet: "Bei allen Feldern, die mit VARCHAR-Spaltentypen gespeichert sind, ist die maximale Länge auf 255 Zeichen beschränkt, wenn Sie für das Feld unique = True verwenden. Dies wirkt sich auf CharField, SlugField aus."
Chris
5

Verwenden Sie TextFieldstattdessen

infowindow = models.TextField()
tshubham7
quelle
2
Beachten Sie, dass TextFielddies max_lengthauf Datenbankebene nicht validiert wird.
Chris Conlan
1

Dies hängt von der Backend-Datenbank ab. Wenn Sie MySQL 5.6 verwenden, gibt es ein Limit von 65.535. Wenn Sie darüber hinaus verwenden, wird 1024 ebenfalls zugelassen, jedoch nicht darüber hinaus.

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

Ich bin oben auf MySQL 5.7 gelaufen

Vitthal Sarode
quelle
1
Ob dies funktioniert, hängt vom verwendeten Datenbank-Backend ab, wie bereits in der akzeptierten Antwort erwähnt. Während dies funktionieren könnte, ist die Verwendung von TextField eine bessere Lösung.
Colidyre
0

Es hängt wirklich von der Datenbank ab, die Sie für das Modell verwenden. PostgreSQL, MySQL usw. haben unterschiedliche Einstellungen und Grenzen.

Wenn Sie wirklich eine lange Zeichenfolge benötigen oder nicht sicher sind, wie lang die Variable sein würde, können Sie immer sicher sein variable=models.TextField().

Adrian Stanica
quelle