Jaki jest maksymalny rozmiar „max_length” w Django?

86

To jest mój model:

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)

Ale to nie może działać. Jaki jest maksymalny rozmiar max_lengthparametru?

zjm1126
źródło

Odpowiedzi:

104

To zależy od zaplecza bazy danych. Django DB Docs powie, że max_length=255jest gwarantowane do pracy zawsze.

Jeśli potrzebujesz czegoś z kwoty określonej w pytaniu, proponuję użyć TextField .

Haes
źródło
2
Ponieważ tak jest w połączeniu z faktem, że w przypadku DB, którego używam, ogranicza to również unikalną opcję do 255, osobiście trzymam się mantry, że jeśli potrzebuję CharField, który jest większy niż 255, robię to TextField.
digitaldreamer
13
Maksymalny rozmiar TextField również zależy od bazy danych. W przypadku MySQL jest to około 4 bilionów.
Justin Abrahms
2
W MySQL Charfield to varchar, maksymalnie 65 535 (ale jest to również maksymalny rozmiar wiersza), zobacz stackoverflow.com/questions/13506832/… . Nie ma żadnej kary za użycie dużego maksymalnego rozmiaru, MySQL wykorzysta to, czego faktycznie potrzebuje. Zwróć uwagę, że pola tekstowe są obsługiwane w różny sposób, co ma wpływ na wydajność, więc lepiej jest indeksować z innymi polami w innej tabeli (im więcej indeksowanych wierszy na stronę bazy danych, tym lepiej), znajdź to, czego potrzebujesz, a następnie za pomocą znanego teraz klucza pobierz pole tekstowe.
Aviah Laor,
2
Chociaż TextField jest dobrym wyborem dla> 255 ciągów, nie jest wymuszany max_lengthna poziomie modelu (lub bazy danych). Może to skomplikować pewną logikę walidacji, w przeciwieństwie do CharField, która pozwala określić max_lengthwymuszenie przez Django.
elnygren
1
Połączony akapit mówi: „Wszystkie pola, które są przechowywane z typami kolumn VARCHAR, mają maksymalną długość ograniczoną do 255 znaków, jeśli używasz dla tego pola unique = True. Dotyczy to CharField, SlugField”.
Chris
5

Użyj TextFieldzamiast tego

infowindow = models.TextField()
tshubham7
źródło
2
Uważaj, TextFieldto nie sprawdza się max_lengthna poziomie bazy danych.
Chris Conlan,
1

To zależy od bazy danych zaplecza. Jeśli używasz MySQL 5.6, obowiązuje limit 65 535. Jeśli używasz powyżej tego, pozwoli to również na 1024, ale nie dalej.

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

Uruchomiłem powyżej na MySQL 5.7

Vitthal Sarode
źródło
1
To, czy to zadziała, zależy od używanego zaplecza bazy danych, jak już wspomniano w zaakceptowanej odpowiedzi. Chociaż może to zadziałać, lepszym rozwiązaniem jest użycie TextField.
colidyre
0

To naprawdę zależy od bazy danych, której używasz dla modelu. PostgreSQL, MySQL i tak dalej mają różne ustawienia i ograniczenia.

Jeśli naprawdę potrzebujesz długiego łańcucha lub nie jesteś pewien, jak długa będzie zmienna, zawsze bezpiecznie po prostu ją wykorzystaj variable=models.TextField().

Adrian Stanica
źródło