Каков максимальный размер max_length в Django?

86

Это моя модель:

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)

Но он не может работать. Каков максимальный размер max_lengthпараметра?

zjm1126
источник

Ответы:

104

Это зависит от серверной части базы данных. Джанго DB Docs скажет вам, что max_length=255гарантированно работает всегда.

Если вам нужно что-то из той суммы, которую вы указали в своем вопросе, я бы предложил использовать TextField .

Haes
источник
2
Поскольку это так в сочетании с тем фактом, что для БД, которую я использую, он также ограничивает уникальный параметр до 255, я лично придерживаюсь мантры, что если мне нужно CharField, который больше 255, я делаю его TextField.
digitaldreamer
13
Максимальный размер TextField также зависит от БД. Для MySQL это где-то около 4 триллионов.
Джастин Абрамс
2
В MySQL Charfield - это varchar, не более 65 535 (но это также максимальный размер строки), см. Stackoverflow.com/questions/13506832/… . Нет никаких штрафов за использование большого максимального размера, MySQL будет использовать то, что ему действительно нужно. Обратите внимание, что текстовые поля обрабатываются по-разному, что влияет на производительность, поэтому лучше индексировать с другими полями в другой таблице (чем больше проиндексированных строк на страницу БД, тем лучше), найдите то, что вам нужно, а затем с помощью известного теперь ключа получите текстовое поле.
Aviah Laor
2
Хотя TextField подходит для> 255 строк, он не max_lengthприменяется на уровне модели (или базы данных). Это может усложнить некоторую логику проверки, в отличие от CharField, который позволяет вам указать, max_lengthчто Django применяет .
elnygren 02
1
В связанном абзаце говорится: «Любые поля, которые хранятся с типами столбцов VARCHAR, имеют ограничение max_length до 255 символов, если вы используете unique = True для поля. Это влияет на CharField, SlugField».
Крис
5

Используйте TextFieldвместо

infowindow = models.TextField()
tshubham7
источник
2
Остерегайтесь того, что TextFieldне проверяется max_lengthна уровне базы данных.
Крис Конлан
1

Это зависит от внутренней базы данных. Если вы используете MySQL 5.6, то существует ограничение 65 535. Если вы используете вышеупомянутое, это также позволит использовать 1024, но не более того.

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

Я запускал выше в MySQL 5.7

Виттал Сарод
источник
1
Если это будет работать, зависит от используемой серверной части базы данных, как уже упоминалось в принятом ответе. Хотя это может сработать, лучшим решением будет использование TextField.
colidyre
0

Это действительно зависит от базы данных, которую вы используете для модели. PostgreSQL, MySQL и другие имеют разные настройки и ограничения.

Если вам действительно нужна длинная строка или вы не уверены, какой длины будет переменная, всегда можно просто использовать ее variable=models.TextField().

Адриан Станица
источник