J'ai une table avec une colonne 'hotel'. Le projet est créé dans Laravel 5.4, j'ai donc utilisé Migrations.
$table->string('hotel', 50);
C'est MYSQL VARCHAR (50). Cela fonctionnait bien parce que, lorsque je développais, j’utilisais des noms d’hôtels tels que "HILTON NEW YORK 5 " *.
Le projet est maintenant en production et les clients ont demandé pourquoi ils ne pouvaient pas saisir les noms d'hôtels longs. Je l'ai testé avec un nom d'hôtel mock tel que "Long long long long long long long long et très très très très long nom d'hôtel 5 étoiles"
Cela m'a donné une erreur:
"SQLSTATE [22001]: Données de chaîne, tronquées à droite: 1406 Données trop longues pour la colonne 'hôtel' à la ligne 1"
J'ai ouvert la base de données dans mon Sequel Pro et je l'ai changée
Après chaque modification, je l'ai testé avec le même message "5 fois commence" et j'obtiens la même erreur (voir ci-dessus).
J'ai vérifié le type de colonne avec
SHOW FIELDS FROM table_name
et ça m'a donné
Domaine | Type
hôtel | texte
le type du champ est donc "texte" (65 535 caractères).
Peut-être que c'est en quelque sorte connecté avec Laravel Fichier de migration (voir ci-dessus) où j'ai défini VARCHAR (50) au début? Mais je ne peux pas réexécuter la migration en production, car la table contient maintenant des données .
J'apprécierais toute aide.
PDATE: J'ai découvert que le nom de cet hôtel long était enregistré dans la base de données. Mais l'utilisateur a toujours cette erreur ennuyeuse à chaque fois après avoir soumis le formulaire ...
Vous devez créer une nouvelle migration, enregistrez-la avec composer du
commande et exécute php artisan migrate
commande pour changer le type de la colonne:
Schema::table('the_table_name', function (Blueprint $table) {
$table->string('hotel', 255)->change();
});
Dans votre développement local, essayez de remplacer le type de colonne par:
$table->longText('columnName')
à partir de votre fichier de migration. Cela l'a résolu pour moi. Mais si vous êtes en ligne, créez une nouvelle migration, comme l'a suggéré Alexey, puis utilisez le type de colonne longText()
.
changez le type de colonne de string
à text
.
Puis lancez une actualisation de la migration en utilisant php artisan migrate:refesh
Modifiez le type de données de la colonne de chaîne en texte et ne donnez pas de longueur.