Djangoの「max_length」の最大サイズはいくつですか?


87

これは私のモデルです:

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パラメータの最大サイズはいくつですか?

回答:


106

それはデータベースのバックエンドに依存します。ジャンゴDBドキュメントがあること、を教えてくれますmax_length=255常に動作することが保証されています。

質問で指定した量が必要な場合は、TextFieldを使用することをお勧めします


2
これは、私が使用するDBの場合も一意のオプションを255に制限するという事実と相まって、255より大きいCharFieldが必要な場合はTextFieldにするというマントラに個人的に固執します。
digitaldreamer 2010

13
TextFieldの最大サイズもDBに依存します。MySQLの場合、約4兆です。
Justin Abrahms 2010

2
MySQLのCharFieldですでは、VARCHARの最大65,535(これはまた、最大行サイズである)、参照stackoverflow.com/questions/13506832/...を。大きな最大サイズを使用してもペナルティはありません。MySQLは実際に必要なものを使用します。テキストフィールドの処理方法は異なり、パフォーマンスに影響するため、別のテーブルの他のフィールドでインデックスを作成し(DBページごとにインデックスが作成された行が多いほど良い)、必要なものを見つけてから、既知のキーを使用してテキストフィールドを取得することをお勧めします。
Aviah Laor 2016

2
TextFieldは255を超える文字列に対しては適切な選択ですがmax_length、モデル(またはデータベース)レベルでは適用されません。これはmax_length、Djangoが強制するを指定できるCharFieldの場合とは異なり、一部の検証ロジックを複雑にする可能性があります。
elnygren 2017年

1
リンクされた段落は次のように述べています。「フィールドにunique = Trueを使用している場合、VARCHAR列タイプで格納されるフィールドのmax_lengthは255文字に制限されます。これはCharField、SlugFieldに影響します。」
クリス


1

バックエンドデータベースに依存します。MySQL 5.6を使用する場合、65,535の制限があります。それ以上を使用している場合は、1024も許可されますが、それを超えることはできません。

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

私はMySQL5.7で上記を実行しました


1
これが機能するかどうかは、受け入れられた回答ですでに述べたように、使用されているデータベースバックエンドによって異なります。これは機能する可能性がありますが、より良い解決策はTextFieldを使用することです。
colidyre 2018

0

これは、モデルに使用するデータベースによって異なります。PostgreSQL、MySQLなどには異なる設定と制限があります。

本当に長い文字列が必要な場合、または変数の長さがわからない場合は、常に。を使用しても安全variable=models.TextField()です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.