Ma table ressemble à
create table try ( name varchar(8), CREATED_BY varchar(40) not null);
puis j'ai un déclencheur pour remplir automatiquement le champ CREATED_BY
create trigger autoPopulateAtInsert BEFORE INSERT on try for each row set new.CREATED_BY=user();
Quand je fais une insertion en utilisant
insert into try (name) values ('abc');
l'entrée est faite dans le tableau mais j'obtiens toujours le message d'erreur
Field 'CREATED_BY' doesn't have a default value Error no 1364
Existe-t-il un moyen de supprimer cette erreur sans rendre le champ nullable ET sans supprimer le déclencheur? Sinon, mon hibernation verra ces exceptions (même si les insertions ont été faites) et l'application se plantera.
Cela est dû au
STRICT_TRANS_TABLES
mode SQL défini dans lefichier. La suppression de ce paramètre et le redémarrage de MySQL devraient résoudre le problème.
Voir https://www.farbeyondcode.com/Solution-for-MariaDB-Field--xxx--doesn-t-have-a-default-value-5-2720.html
Si l'édition de ce fichier ne résout pas le problème, voir http://dev.mysql.com/doc/refman/5.6/en/option-files.html pour d'autres emplacements possibles des fichiers de configuration.
la source
-- verified that the mode was previously set select @@GLOBAL.sql_mode; -- UPDATE MODE SET @@global.sql_mode= 'YOUR_VALUE';
Ouvrez phpmyadmin et accédez à l'onglet «Plus» et sélectionnez le sous-menu «Variables». Faites défiler vers le bas pour trouver le mode SQL. Modifiez le mode SQL et supprimez 'STRICT_TRANS_TABLES' Enregistrez-le.
la source
sudo nano /etc/mysql/my.cnf
, ajoutez[mysqld] sql_mode = "ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
, enregistrer et quitter, et redémarrer mysqlsudo service mysql restart
sql_mode
en null, c'est-sql_mode = ""
à- dire pour d'autres erreurs similaires.Dans phpmyadmin, procédez comme suit:
Dans mon cas, j'obtiens ce qui suit:
Copiez ce résultat et supprimez
STRICT_TRANS_TABLES
. Ensuite, procédez comme suit:la source
phpmyadmin
du tout, utilisez ces commandes sur lamysql
ligne de commande.Quand j'ai eu ce même problème avec mysql5.6.20 installé avec Homebrew, je l'ai résolu en allant dans my.cnf
Trouvez la ligne qui ressemble à ceci:
Commentez ci-dessus et redémarrez le serveur mysql
Erreur partie!
la source
Exécutez la console mysql:
, sélectionnez la base de données:
et exécutez (également à partir de la console mysql):
Cela désactivera le mode strict et mysql ne se plaindra plus.
Pour clarifier les choses: la définition de votre base de données dit "ce champ doit avoir une valeur par défaut définie", et en faisant les étapes ci-dessus, vous dites à MySql "non, ignorez-le". Donc, si vous voulez juste faire une solution rapide localement, cette solution est correcte. Mais en général, vous devriez rechercher dans la définition de votre base de données et vérifier si le champ a vraiment besoin de la valeur par défaut et si c'est le cas, définissez-le. Et si la valeur par défaut n'est pas nécessaire, cette exigence doit être supprimée pour avoir une situation propre.
la source
Comme d'autres l'ont dit, cela est dû au
STRICT_TRANS_TABLES
mode SQL.Pour vérifier si le
STRICT_TRANS_TABLES
mode est activé:Pour désactiver le mode strict:
la source
Avant chaque action d'insertion, j'ai ajouté ci-dessous la ligne et résolu mon problème,
Je ne sais pas si c'est la meilleure solution,
la source
Son travail et testé Copie dans le fichier de configuration: /etc/mysql/my.cnf OU /bin/mysql/my.ini
puis redémarrez MySQL
la source
Modifiez votre requête et ajoutez "IGNORE" comme:
la source
Pour les utilisateurs de Windows WampServer :
WAMP> MySQL> my.ini
rechercher un fichier pour
sql-mode=""
Décommentez-le.
la source
sql-mode="STRICT_ALL_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE,NO_AUTO_CREATE_USER"sql-mode="STRICT_ALL_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE,NO_AUTO_CREATE_USER"
ensql-mode=""
. Lesql-mode=""
fait de ne pas commenter a causé l'erreur.Cela semble être causé par un bogue de longue date (depuis 2004) (# 6295) dans MySQL , intitulé
Il aurait été corrigé dans la version 5.7.1 de MySQL (Changelog, dernière entrée) en 2013, ce qui fait que MySQL se comporte «selon la norme SQL» (ibid).
la source
NOT NULL
contrainte ou l'ajout de la valeur par défaut à la colonne a résolu le problème. Le déclencheur fonctionne comme prévu.Dans Windows Server, modifiez my.ini (par exemple, program files \ mysql \ mysql server nn \ my.ini)
Je ne définirais pas simplement le sql-mode = "", je suggère plutôt de supprimer STRICT_TRANS_TABLES de la ligne, de tout laisser tel quel, puis de redémarrer MySQL à partir de l'utilitaire de services. Ajoutez un commentaire pour les futurs programmeurs qui vous êtes et ce que vous avez fait.
la source
J'ai défini les champs sur non null et le problème est résolu, il se met à jour quand une information est commandée pour y stocker, plus aucun message msqli indiquant que le champ était vide car vous ne lui avez pas inséré de valeur, bien l'application de cette solution peut fonctionner sur certains les projets dépendent de la structure de votre projet.
la source
default
attribut de la colonne denone
àNULL
. À moins de réponses de bonne qualité! mon cPanel me donnait l'accès refusé sur l'hébergement partagé lorsque j'ai essayé de mettre à jour la variable sql_mode.J'ai résolu le problème en changeant le fichier my.ini situé dans le dossier de données. pour mysql 5.6, le fichier my.ini a été déplacé dans le dossier data plutôt que dans le dossier d'installation bin ou mysql.
la source
Je pense que dans la colonne de nom ont des valeurs nulles dans ce cas.
la source