VARCHAR(500)
明示的な500文字の制限を設定したとおりに、列を指定します。あなたはこれを自分で明示的に行っていないかもしれませんが、Djangoはどこかであなたのためにそれを行っています。モデル、完全なエラーテキスト、またはエラーを生成したクエリを表示していないときに、どこが難しいかを教えてください。
不要な場合は、非修飾VARCHAR
を使用するか、TEXT
タイプを使用してください。
varchar
長さtext
は、列サイズのシステム制限(約1GB)とメモリによってのみ制限されます。ただし、長さ修飾子を追加してvarchar
、より小さな制限を手動で設定します。次のすべてはほぼ同等です。
column_name VARCHAR(500)
column_name VARCHAR CHECK (length(column_name) <= 500)
column_name TEXT CHECK (length(column_name) <= 500)
唯一の違いは、データベースメタデータのレポート方法と、制約に違反したときに発生するSQLSTATEです。
次のように、プリペアドステートメントのパラメーターや関数呼び出しなどでは、通常、長さの制約には従いません。
regress=> \x
Expanded display is on.
regress=> PREPARE t2(varchar(500)) AS SELECT $1;
PREPARE
regress=> EXECUTE t2( repeat('x',601) );
-[ RECORD 1 ]-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
?column? | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
明示的なキャストでは、切り捨てが発生します。
regress=> SELECT repeat('x',501)::varchar(1);
-[ RECORD 1 ]
repeat | x
したがって、列を使用していて、データベースの間違ったテーブルまたは間違ったインスタンスを見ていると思います。VARCHAR(500)