Laravel: Chaîne de données, tronqué à droite: 1406 Données trop long pour la colonne
J'ai une table avec une colonne 'hôtel'. Le projet est créé dans Laravel 5.4, j'ai donc utilisé les Migrations.
$table->string('hotel', 50);
C'est MYSQL de type VARCHAR (50). C'était bien, parce que quand j'étais en développement, j'ai utilisé court hotel des noms comme "HILTON NEW YORK 5"*.
Le projet est maintenant sur la production et le client a demandé pourquoi ils ne peuvent pas l'entrée de longue hôtel noms. Je l'ai testé avec une telle maquette nom de l'hôtel que "de Long long long long long long long long long et à très très très long nom de l'hôtel 5 étoiles"
Il m'a donné une erreur:
"SQLSTATE[22001]: Chaîne de données, tronqué à droite: 1406 Données trop long pour
la colonne 'hôtel' à la ligne 1"
J'ai ouvert la base de données dans ma Suite Pro et il a changé
- première VARCHAR (255)
- puis-TEXTE
Après chaque changement je l'ai testé avec le même "de Long long long long long long long long long et à très très très long nom de l'hôtel 5 commence" et obtenir le même message d'erreur (voir ci-dessus).
J'ai vérifié que le type de la colonne avec
SHOW FIELDS FROM table_name
et il m'a donné
Champ | Type
hôtel | texte
de sorte que le type du champ est "texte" en effet (65 535 caractères).
C'est peut-être en quelque sorte lié avec Laravel fichier de Migration (voir ci-dessus) où j'ai mis VARCHAR (50), dans le début? Mais je ne peux pas ré-exécuter la migration sur la production, parce que la table contient des données maintenant.
Serais reconnaissant de toute aide.
Mise à JOUR:
J'ai découvert qu'en fait, il enregistre ce long nom de l'hôtel dans la DB. Mais l'utilisateur obtient toujours cette fâcheuse erreur à chaque fois après la soumission du formulaire...
- Vous pouvez certainement créer une migration de modifier le type de champ. Tant que c'est quelque chose de semblable, il ne devrait pas être un problème.
- Comme toujours, l'essayer sur votre copie locale, juste au cas où, mais je ne vois pas pourquoi ça ne marcherait pas.
- Salut, les gars. Je vous remercie. J'ai créé une nouvelle migration comme Alexey a expliqué dans sa réponse ci-dessous et il a couru (locale), mais l'erreur est toujours s'affiche chaque fois que le formulaire est soumis....:(
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin pour créer une nouvelle migration, l'enregistrer avec
composer du
de commande et exécutezphp artisan migrate
commande pour changer le type de la colonne:php artisan migrate
de commande, aucune donnée ne sera perdue. Mais on dirait que vous êtes nouveau à cela, je vous recommande vraiment de vous entraîner sur la machine locale d'abord et à la sauvegarde des données.up()
méthode et dansdown()
vous devez le modifier en retour il l'état où il est maintenant. Ledown()
méthode est exécutée lorsque vous exécutez lephp artisan migrate:rollback
de commande.Sur votre développement local, essayez de changer le type de colonne:
à partir de votre fichier de migration. Qui a résolu pour moi. Mais si vous avez suivi en direct, puis créer une nouvelle migration comme Alexey l'a proposé et ensuite utiliser
longText()
type de colonne.changer le type de la colonne de
string
àtext
.Puis exécutez une migrer d'actualisation à l'aide de
php artisan migrate:refesh
Changement de la colonne de type de données de chaîne de texte et de ne pas donner de longueur.