web-dev-qa-db-fra.com

Laravel: chaîne de données, tronquée à droite: 1406 Données trop longues pour la colonne

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

  • d'abord à VARCHAR (255)
  • puis à TEXT

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 ...

11
Sergej Fomin

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();
});
9
Alexey Mezenin

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().

4
JDK Ben

changez le type de colonne de string à text.

Puis lancez une actualisation de la migration en utilisant php artisan migrate:refesh

1

Modifiez le type de données de la colonne de chaîne en texte et ne donnez pas de longueur.

0
Abi Raj Nijanandi