Який максимальний розмір '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параметра?

Відповіді:


104

Це залежить від серверної бази даних. Джанго DB Docs скаже вам, що max_length=255гарантовано працює завжди.

Якщо вам потрібно щось із суми, яку ви вказали у своєму запитанні, я б запропонував використовувати TextField .


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

1
У зв’язаному абзаці сказано: "Максимальна довжина будь-яких полів, які зберігаються з типами стовпців VARCHAR, обмежена 255 символами, якщо для поля використовується унікальний = True. Це впливає на CharField, SlugField."
Кріс


1

Це залежить від бази даних. Якщо ви використовуєте MySQL 5.6, тоді обмеження становить 65 535. Якщо ви використовуєте вище, то це дозволить 1024 також, але не більше того.

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

Я працював вище на MySQL 5.7


1
Якщо це буде працювати, це залежить від використовуваної серверної бази даних, як уже зазначалося у прийнятій відповіді. Хоча це може працювати, кращим рішенням є використання TextField.
колайдер

0

Це насправді залежить від бази даних, яку ви використовуєте для моделі. PostgreSQL, MySQL тощо мають різні налаштування та обмеження.

Якщо вам дійсно потрібен довгий рядок або ви не впевнені, якою довжиною буде змінна, завжди безпечно це зробити variable=models.TextField() .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.