Django'da 'max_length'in maksimum boyutu nedir?


87

Bu benim modelim:

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)

Ama koşamaz. max_lengthParametrenin maksimum boyutu nedir ?

Yanıtlar:


106

Bu, veritabanı arka ucuna bağlıdır. Django DB Dokümanlar olduğunu, söyleyecektirmax_length=255 her zaman işe garantilidir.

Sorunuzda belirttiğiniz miktardan bir şeye ihtiyacınız varsa, bir TextField kullanmanızı öneririm .


2
Bu, DB için kullandığım benzersiz seçeneği 255 ile sınırlandırması gerçeğiyle birleştiğinde, şahsen, 255'ten daha büyük bir CharField'e ihtiyacım olursa, onu bir TextField yapacağım mantrasına sadık kalıyorum.
digitaldreamer

13
TextField'ın maksimum boyutu da DB'ye bağlıdır. MySQL için 4 trilyon civarında bir yerdedir.
Justin Abrahms

2
MySQL'de Charfield bir varchar'dır, maksimum 65,535 (ancak bu aynı zamanda maksimum satır boyutudur), bkz. Stackoverflow.com/questions/13506832/… . Büyük maksimum boyut kullanmanın bir cezası yoktur, MySQL gerçekte ihtiyaç duyduğu şeyi kullanacaktır. Metin alanlarının performans etkileri ile farklı şekilde ele alındığını unutmayın, bu nedenle başka bir tablodaki diğer alanlarla indekslemek daha iyidir (DB sayfası başına ne kadar çok indekslenmiş satır o kadar iyidir), ihtiyacınız olanı bulun ve sonra artık bilinen anahtarla Textfield'ı edinin.
Aviah Laor

2
TextField> 255 dizge için uygun bir seçim olsa max_lengthda, model (veya veritabanı) düzeyinde zorlama yapmaz . Bu max_length, Django'nun uyguladığı bir değeri belirlemenize izin veren CharField durumunun aksine bazı doğrulama mantığını karmaşıklaştırabilir .
elnygren

1
Bağlantılı paragraf şunu söyler: "Alan için unique = True kullanıyorsanız, VARCHAR sütun türleriyle depolanan tüm alanların maks_uzunlukları 255 karakterle sınırlıdır. Bu CharField, SlugField'ı etkiler."
Chris


1

Arka uç veritabanına bağlıdır. MySQL 5.6 kullanıyorsanız, 65.535'lik bir sınır vardır. Bunun yukarısını kullanıyorsanız, 1024'e de izin verir, ancak bunun ötesine geçmez.

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

MySQL 5.7 üzerinde koştum


1
Bunun işe yarayıp yaramayacağı, kabul edilen yanıtta daha önce belirtildiği gibi kullanılan veritabanı arka ucuna bağlıdır. Bu işe yarayabilirken, daha iyi bir çözüm TextField kullanmaktır.
colidyre

0

Model için kullandığınız veritabanına gerçekten bağlıdır. PostgreSQL, MySQL ve benzerlerinin farklı ayarları ve sınırları vardır.

Gerçekten uzun bir dizgeye ihtiyacınız varsa veya değişkenin ne kadar uzun olacağından emin değilseniz, her zaman güvenli bir şekilde devam edin variable=models.TextField().

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.