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?

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 .


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


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


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().

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.