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: p> Comment puis-je activer Django de permettre des valeurs plus longues? strong> p> 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) " p> Ma base de données est déjà codée pour UTF-8, selon mon bohost Webhost. p> li>
edit strong>: 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? strong> p> li>
ul> 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. P> p>
3 Réponses :
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 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 . P> Voici quelques options: p> 1:
Déposez la base de données et exécutez Syncdb à nouveau. 2: Mettez à jour manuellement la colonne via SQL: P> Type In 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. P> P> max_length code> attribut de 4 à un numéro que vous attendre sera assez longtemps pour contenir les données que vous nourrissez. p> python manage.py dbshell code> pour entrer dans votre coquille de base de données et saisir p>
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" code> 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. :)
Utilisation de Django 1.11 et Postgres 9.6 Je l'ai rencontrée, sans raison apparente. p>
i réglez max_length = 255 em> dans le fichier de migration et exécuté: p>
gérer.py migrer p>
Puis j'ai défini la longueur correcte sur le modèle max_length em> et couru un autre Makemigrations em> et le Ran migrez EM>. P>
Juste au cas où une personne circule dans cette erreur pour Django 3 et Postgres. P>
Étape 1: Allez dans votre dossier de migration. P>
Étape 2: Accédez à votre récent fichier de migration. P>
Étape 3: Recherchez la liste des opérations dans le fichier de migration. P>
Étape 4: Mettez à jour le champ ou la colonne de table Max_Length au numéro supérieur pour accueillir vos données. P>
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 code>, déposer la base de données et exécuterSyncdb code> à nouveau ou apprendre et utiliser un outil de migration de base de données commesud code>@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.