En spécifiant la colonne en tant que VARCHAR(500)
, vous avez défini une limite explicite de 500 caractères. Vous n'avez peut-être pas fait cela vous-même explicitement, mais Django l'a fait pour vous quelque part. Il est difficile de vous dire où lorsque vous n'avez pas montré votre modèle, le texte complet de l'erreur, ou la requête qui a généré l'erreur.
Si vous ne voulez pas de limite, utilisez un VARCHAR
non qualifié, ou utilisez le type TEXT
.
VARCHAR
et TEXT
sont limités en longueur uniquement par les limites système sur la taille de la colonne - environ 1 Go - et par votre mémoire. Cependant, ajouter un qualificateur de longueur à VARCHAR
définira manuellement une limite plus petite. Tous les exemples suivants sont largement équivalents :
column_name VARCHAR(500)
column_name VARCHAR CHECK (length(column_name) <= 500)
column_name TEXT CHECK (length(column_name) <= 500)
Les seules différences sont dans la façon dont les métadonnées de la base de données sont rapportées et quel SQLSTATE est soulevé lorsque la contrainte est violée.
La contrainte de longueur n'est généralement pas respectée dans les paramètres des instructions préparées, les appels de fonctions, etc., comme le montre :
regress => \x
L'affichage étendu est activé.
regress => PRÉPARE t2(varchar(500)) COMME SÉLECTIONNER $1;
PRÉPARER
regress => EXÉCUTER t2( repeat('x',601) );
-[ RECORD 1 ]-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
?column? | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
et dans les conversions explicites, cela aboutit à une troncature :
regress => SÉLECTIONNER repeat('x',501)::varchar(1);
-[ RECORD 1 ]
repeat | x
donc je pense que vous utilisez bien une colonne VARCHAR(500)
, et vous regardez la mauvaise table ou la mauvaise instance de la base de données.