9
votes

Erreur de formulaire Django / de base de données: valeur trop longue pour le caractère de caractère variable (4)

J'essaie d'enregistrer une bande d'entreprise Stripe (service de facturation) [environ 200 caractères] à ma base de données à Django.

L'erreur spécifique est la suivante: xxx

Comment puis-je activer Django de permettre des valeurs plus longues?

J'ai vu : Valeur trop longue pour le caractère de type variant (n) et: Django Fixture échoue, indiquant "DatabaseError: valeur aussi Longue pour le caractère de type variable (50) "

  • Ma base de données est déjà codée pour UTF-8, selon mon bohost Webhost.

  • edit : Je vois qu'une réponse recommande de rendre la colonne plus large. Est-ce que cela implique de modifier la base de données PostgreSQL?

    Mon système spécifique est Webfaction, Machine partagée CENTOS, Django en cours d'exécution sur PostgreSQL. J'apprécierais vraiment un aperçu conceptuel de ce qui se passe et comment je peux le réparer.


5 commentaires

Oui, rendez la colonne plus large. Tapez Python Manage.py dbshell pour entrer dans votre coquille de base de données. Vous pouvez modifier manuellement la table avec alter Table des instructions , déposer la base de données et exécuter Syncdb à nouveau ou apprendre et utiliser un outil de migration de base de données comme sud


@Yujitomita Je pense que c'est une réponse suffisamment complète pour être une réponse à IMHO.


Pouvez-vous publier le modèle que vous essayez de sauvegarder ou utilisez-vous le code de quelqu'un d'autre? Vous définissez généralement la longueur de Varcharne en tant que paramètre max_length sur le charfield en question.


@Jameskhoury maintenant je devais poster une réponse et cela a pris plus de travail!


@Yujitomita merci pour votre aide. Je vais essayer cela aujourd'hui.


3 Réponses :


20
votes

Oui, rendez la colonne plus large. Le message d'erreur est tout à fait clair: vos 200 caractères sont trop gros pour s'adapter dans un Varchar (4).

Tout d'abord, mettez à jour vos champs de modèle max_length attribut de 4 à un numéro que vous attendre sera assez longtemps pour contenir les données que vous nourrissez.

Suivant up Vous devez mettre à jour la colonne de base de données elle-même comme Django ne mettra pas automatiquement à jour les colonnes existantes .

Voici quelques options:

1: Déposez la base de données et exécutez Syncdb à nouveau. AVERTISSEMENT: vous perdrez tous vos données .

2: Mettez à jour manuellement la colonne via SQL:

Type In python manage.py dbshell pour entrer dans votre coquille de base de données et saisir xxx

3: apprendre et utiliser un outil de migration de base de données comme Django South qui aidera à garder votre base de données mise à jour avec votre code de modèle.


3 commentaires

Vous pouvez laisser tomber le 200 si ce n'est pas une exigence: "" Il y a Aucune différence de performance parmi ces trois types, à l'exception de l'augmentation de l'espace de stockage lors de l'utilisation du type à pavé vierge et quelques cycles de processeurs supplémentaires pour vérifier la longueur lors de la mémorisation d'une colonne contrainte de longueur. Bien que le caractère (N) a des avantages de la performance dans certains Autres systèmes de base de données, il n'y a pas de tel avantage dans PostgreSQL "


Je voudrais +1 ceci juste pour le commentaire "Vous devez mettre à jour la colonne de base de données elle-même" c'est quelque chose que je fais souvent trébucher.


@James Khoury - Cette réponse était votre faute! Et je pensais pouvoir m'éloigner avec un commentaire et être sur mon chemin. :)



1
votes

Utilisation de Django 1.11 et Postgres 9.6 Je l'ai rencontrée, sans raison apparente.

i réglez max_length = 255 dans le fichier de migration et exécuté:

gérer.py migrer

Puis j'ai défini la longueur correcte sur le modèle max_length et couru un autre Makemigrations et le Ran migrez .


0 commentaires

0
votes

Juste au cas où une personne circule dans cette erreur pour Django 3 et Postgres.

Étape 1: Allez dans votre dossier de migration.

Étape 2: Accédez à votre récent fichier de migration.

Étape 3: Recherchez la liste des opérations dans le fichier de migration.

Étape 4: Mettez à jour le champ ou la colonne de table Max_Length au numéro supérieur pour accueillir vos données.


0 commentaires