mysql error 1364 Field n’a pas de valeurs par défaut

Ma table ressemble à

create table try ( name varchar(8), CREATED_BY varchar(40) not null); 

et puis j’ai un déclencheur pour remplir automatiquement le champ CREATED_BY

 create sortinggger autoPopulateAtInsert BEFORE INSERT on try for each row set new.CREATED_BY=user(); 

Quand je fais un insert en utilisant

 insert into try (name) values ('abc'); 

l’entrée est faite dans la table mais j’obtiens toujours le message d’erreur

 Field 'CREATED_BY' doesn't have a default value Error no 1364 

Y a-t-il un moyen de supprimer cette erreur sans rendre le champ nullable ET sans supprimer le sortingggfer? Sinon, mon hibernation verra ces exceptions (même si les insertions ont été effectuées) et l’application se bloquera.

Définissez une valeur par défaut pour Created_By (par exemple: vide VARCHAR ) et le déclencheur mettra à jour la valeur de toute façon.

Ceci est dû au mode SQL STRICT_TRANS_TABLES défini dans le

% PROGRAMDATA% \ MySQL \ MySQL Server 5.6 \ my.ini

fichier. Supprimer ce paramètre et redémarrer MySQL devrait 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 la modification de ce fichier ne résout pas le problème, consultez http://dev.mysql.com/doc/refman/5.6/en/option-files.html pour d’autres emplacements possibles des fichiers de configuration.

Ouvrez phpmyadmin et allez dans l’onglet “Plus” et sélectionnez le sous-menu “Variables”. Faites défiler pour trouver le mode sql. Modifiez le mode SQL et supprimez ‘STRICT_TRANS_TABLES’ Enregistrez-le.

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

 nano /usr/local/Cellar/mysql/5.6.20_1/my.cnf 

Trouvez la ligne qui ressemble à ça:

 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 

Commentaire ci-dessus line out et redémarrer le serveur mysql

 mysql.server restart 

Erreur passée!

Dans phpmyadmin, effectuez les opérations suivantes:

 select @@GLOBAL.sql_mode 

Dans mon cas, je reçois ce qui suit:

 ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES ,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION 

Copiez ce résultat et supprimez STRICT_TRANS_TABLES . Effectuez ensuite les opérations suivantes:

 set GLOBAL sql_mode='ONLY_FULL_GROUP_BY,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' 

Son travail et testé Copier dans le fichier de configuration: /etc/mysql/my.cnf OU /bin/mysql/my.ini

 [mysqld] port = 3306 sql-mode="" 

puis redémarrez MySQL

Avant chaque action d’insertion j’ai ajouté la ligne ci-dessous et résolu mon problème,

 SET SQL_MODE = ''; 

Je ne suis pas sûr si c’est la meilleure solution,

 SET SQL_MODE = ''; INSERT INTO `mytable` ( `field1` , `field2`) VALUES ('value1', 'value2'); 

Cela semble être causé par un bug de longue date (depuis 2004) (# 6295) dans MySQL , intitulé

Les déclencheurs ne sont pas traités pour les colonnes NOT NULL .

Il aurait été corrigé dans la version 5.7.1 de MySQL (Changelog, dernière entrée) en 2013, permettant à MySQL de se comporter comme «selon le standard SQL» (ibid).

Pour les utilisateurs de Windows WampServer :

WAMP> MySQL> my.ini

fichier de recherche pour sql-mode=""

Décommentez-le.

Modifiez votre requête et ajoutez “IGNORE” en tant que:

 INSERT IGNORE INTO `mytable` ( `field1` , `field2`) VALUES ('value1', 'value2'); 

Exécutez la console mysql, sélectionnez la firebase database et exécutez (également depuis la console mysql):

 SET GLOBAL sql_mode=''; 

Cela désactivera le mode ssortingct et mysql ne se plaindra plus.

Je mets les champs sur null et le problème est résolu, il se met à jour lorsqu’une information est commandée pour le stocker, plus de message msqli ne s’affiche pour indiquer que le champ était vide, vous n’avez pas inséré de valeur. projets dépend de la structure de votre projet.

Comme d’autres l’ont dit, cela est dû au mode SQL STRICT_TRANS_TABLES .

Pour vérifier si le mode STRICT_TRANS_TABLES est activé:

 SHOW VARIABLES LIKE 'sql_mode'; 

Pour désactiver le mode ssortingct:

 SET GLOBAL sql_mode='';