2011-09-08 62 views
187

DjangoのCharField()TextField()の違いは何ですか? documentationには、小さな文字列にはCharField()を使用し、大きい文字列にはTextField()を使用する必要があります。さて、「小さい」と「大きい」の間に線が引かれる場所はどこですか?この事件の原因となっているボンネットの下で何が起こっているのですか?Django CharField vs TextField

答えて

214

RDBMSのvarchar(またはそれに類するもの)との違い - 通常は最大長で指定され、パフォーマンスやストレージの点で効率的かもしれません。 - text(またはそれに類する)タイプです。ハードコードされた実装の制限(DBスキーマではない)。

PostgreSQL 9は具体的には"There is no performance difference among these three types"ですが、AFAIKにはいくつかの違いがあります。 MySQLでは、これは覚えておいてください。

最大長を制限する必要がある場合は、CharFieldを使用することをお勧めします。それ以外の場合はTextFieldです。

これはDjango固有のものではありません。

+24

逆にCharFieldを使用する場合は、最大長を指定する必要があります。 –

+10

デフォルトでは 'TextField'を使用するとアプリケーションの移植性に影響を与えることがわかりました。 Postgresにはパフォーマンス・ヒットはないかもしれませんが、OracleはWHERE文でフィールドを使用できないなど、いくつかの煩わしさがある 'CLOB 'として格納します。ちょうど考慮すべき何か。 – Rob

+1

Oracleでは、 'CharField'は2000より大きい' max_length'を持つことができないか、ORA-00910:指定された長さがそのデータ型には長すぎます。 – Dinei

22

場合によっては、フィールドの使用方法に結びついている場合があります。一部のDBエンジンでは、フィールドの違いにより、フィールド内のテキストの検索方法(および検索方法)が決まります。 CharFieldsは、通常、文字列 "one plus two"の "one"を検索する場合など、検索可能なものに使用されます。ストリングが短いので、エンジンの検索にかかる時間が短くなります。 TextFieldsは、通常、(ブログの本文のように)検索されることを目的としていませんが、大量のテキストを保持するためのものです。今のほとんどはDBエンジンに依存し、Postgresのように問題はありません。

ModelFormsを使用する場合は、フォームに異なるタイプの編集フィールドが表示されます。 ModelFormはCharFieldの1行のテキストとTextFieldの複数行のサイズのHTMLフォームを生成します。

3

たとえば、。 2つのフィールドは以下のようなモデルに追加される..

以下
description = models.TextField(blank=True, null=True) 
title = models.CharField(max_length=64, blank=True, null=True) 

は、移行が適用されるときに実行MySQLのクエリです。 TextField(説明)フィールドの

のように定義されているCharFieldですが255文字のMAX_LENGTHを有するlongtext

ALTER TABLE `sometable_sometable` ADD COLUMN `description` longtext NULL; 

varchar(64)

ALTER TABLE `sometable_sometable` ADD COLUMN `title` varchar(64) NULL; 
ALTER TABLE `sometable_sometable` ALTER COLUMN `title` DROP DEFAULT; 
0

として定義されるCharField(タイトル)MAX_LENGTH(必須)のためTextFieldは255文字以上を保持できます。大きな文字列を入力すると、TextFieldが使用されます。 max_lengthパラメータがTextFieldに渡されると、長さの検証がTextAreaウィジェットに渡されることを知っておいてください。

関連する問題