web-dev-qa-db-fra.com

DatabaseError: valeur trop longue pour le caractère de type variant (100)

J'ai un site Web Django exécutant un mini système de gestion de la sécurité que nous avons construit en interne il y a des années, il utilise postgresql. Lors de l'enregistrement d'un titre simple et d'un paragraphe de texte, l'erreur suivante apparaît:

value too long for type character varying(100)

Ce qui est étrange, c’est qu’aucune colonne ne varie (100), elles sont toutes 200 ou 250, même celles par défaut de Django ont été modifiées de 100 à 200 en raison d’un ticket rouvert mentionné ici

Est-ce que quelqu'un connaît une solution à ce problème?

29
tdelam

Je peux parier que vous avez un SlugField sans longueur prédéfinie? Définissez-le sur 255 et migrez

58
Michael Samoylov

J'ai également eu ce problème lors de l'utilisation d'un champ de fichier et me gratifiais la tête pendant un moment. Bien entendu, les instances FileField par défaut sont créées avec une limite de 100 caractères. 

https://docs.djangoproject.com/en/dev/ref/models/fields/#filefield

25
Kerridge0

Ceci est un message d'erreur de Postgres et non de Django.

Vous semblez avoir changé la longueur du champ dans le models.py, mais cela ne change pas la longueur de la base de données créée lorsque vous avez créé un manage.py syncdb.

Vous devez modifier directement la longueur du champ dans la base de données.

13
Lakshman Prasad

La réponse de Michael Samoylov m'a orienté dans la bonne direction. J'ai eu la même erreur, sauf que c'était avec un FileField.

Les champs ont une longueur maximale, même si vous n'avez pas défini explicitement une longueur maximale. Augmentez la valeur de sorte que vos données correspondent pour éviter l'erreur.

Dans mon cas, les données étaient trop volumineuses pour être raisonnablement stockées dans la base de données. J'ai eu recours à l'enregistrement de mon fichier sur le disque, puis en enregistrant le chemin du fichier dans la base de données.

1
Shaun Overton

Je me rends compte que la question a déjà été résolue, mais pour les autres qui viennent ici lorsqu'ils cherchent le message d'erreur:

Dans mon cas, le problème était que le nom de ma table dépassait 50 caractères. Apparemment, ce n'est pas autorisé. Changer le nom de la table a résolu le problème.

Lisez plus ici: https://code.djangoproject.com/ticket/18959

0
Ramon de Jesus

Si ce n'est pas SlugField, FileField ou tout autre champ mentionné ici, revenez à l'endroit où la migration s'est bloquée dans le terminal. Pour moi, c'était AddField

Bonne conversation. 

0
Jon Froiland

Si vous utilisez Django et que rien de tout cela ne fonctionne. essayez de supprimer tous les fichiers de migration et à nouveau en cours d'exécution 

python manage.py makemigrations

puis 

python manage.py migrate
0
Ojas Kale

Django 2.1

J'ai rencontré ce problème lors du passage de sqlite3 à postgresql . Supprimez les fichiers de migration du dossier de migration de chaque application, à l'exception de __init__.py Relancez ensuite la migration.

(venv)myapp$python manage.py makemigrations
(venv)myapp$python manage.py migrate
(venv)myapp$python manage.py runserver
0
7guyo