web-dev-qa-db-fra.com

Erreur MySql: 1364 Le champ 'display_name' n'a pas de valeur par défaut

Je viens de passer d'une installation MAMP à une installation native Apache, MySql et PHP. Tout fonctionne, mais j'ai commencé à utiliser mon application Web dans le nouvel environnement et soudainement, toutes les commandes INSERT entraînent l'erreur suivante:

SQLSTATE [HY000]: Erreur générale: 1364 Le champ 'display_name' n'a pas de valeur par défaut

Il semble que je ne puisse pas laisser de champ vide là où j’ai pu le faire auparavant. J'utilise MySQL version 5.6.13

Est-il possible de modifier ce paramètre dans MySql?

43
Ben Thompson

MySQL est probablement en mode STRICT.

Essayez d’exécuter SET GLOBAL sql_mode='' ou modifiez votre fichier.cnf pour vous assurer que vous ne définissez pas STRICT_ALL_TABLES ou similaire.

124
Tim B

MySQL est probablement en mode STRICT, ce qui n'est pas nécessairement une mauvaise chose, car vous identifierez les bogues/problèmes très tôt et vous ne penserez pas que tout fonctionne comme prévu.

Modifiez la colonne pour autoriser null:

ALTER TABLE `x` CHANGE `display_name` `display_name` TEXT NULL

ou donnez-lui une valeur par défaut sous forme de chaîne vide:

ALTER TABLE `x` CHANGE `display_name` `display_name` TEXT NOT NULL DEFAULT ''
17
calcinai

Toutes ces réponses sont un bon moyen, mais je ne pense pas que vous souhaitiez toujours consulter votre base de données pour modifier la valeur par défaut que vous avez définie sur NULL. Je vous suggère d'aller à l'application/User.php et de modifier le $ fillable protégé afin qu'il prenne vos nouveaux champs dans le tableau de données utilisé pour vous inscrire. Supposons que vous ajoutiez un nouveau champ de saisie appelé "prénom_nom", votre $ remplissable devrait ressembler à ceci: Cela l'a fait pour moi. Bonne chance!

5
Steph

En outre, ce problème était lié à l'utilisation de Laravel, mais résolu en modifiant le schéma de ma base de données afin d'autoriser les entrées "nulles" sur une table où je compte collecter les informations à partir de formulaires distincts: 

public function up()
{

    Schema::create('trip_table', function (Blueprint $table) {
        $table->increments('trip_id')->unsigned();
        $table->time('est_start');
        $table->time('est_end');
        $table->time('act_start')->nullable();
        $table->time('act_end')->nullable();
        $table->date('Trip_Date');
        $table->integer('Starting_Miles')->nullable();
        $table->integer('Ending_Miles')->nullable();
        $table->string('Bus_id')->nullable();
        $table->string('Event');
        $table->string('Desc')->nullable();
        $table->string('Destination');
        $table->string('Departure_location');
        $table->text('Drivers_Comment')->nullable();
        $table->string('Requester')->nullable();
        $table->integer('driver_id')->nullable();
        $table->timestamps();
    });

}

Le -> nullable (); Ajouté à la fin. Ceci utilise Laravel. J'espère que cela aide quelqu'un, merci!

2
Ryan Jarvis

J'ai également fait face à ce problème et il y a deux façons de le résoudre à Laravel.

1. La première est que vous pouvez définir la valeur par défaut comme null. Je vais vous montrer un exemple.

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->string('gender');
        $table->string('slug');
        $table->string('pic')->nullable();
        $table->string('email')->unique();
        $table->string('password');
        $table->rememberToken();
        $table->timestamps();
    });
}

comme dans l'exemple ci-dessus, vous pouvez définir nullable () pour cette fonctionnalité. Ensuite, lorsque vous insérez des données, mysql définit la valeur par défaut à null.

  1. le second est dans votre modèle, définissez votre champ de saisie dans $ champs remplissables protégé.

    protected $ fillable = [ 'nom', 'email', 'mot de passe', 'slug', 'genre', 'pic' ];

Je pense que le second est correct que le premier et que vous pouvez également définir la fonctionnalité nullable et le remplir en même temps sans problème.

2

J'ai eu cette erreur lorsque j'ai oublié d'ajouter de nouveaux champs/colonnes de formulaire au tableau $ remplissable du modèle de Laravel; le modèle les dépouillait.

0
Andrew Koper