136 votes

mysql error 1364 Le champ n'a pas de valeurs par défaut

Mon tableau ressemble à

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

et ensuite 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();

Lorsque je fais une insertion en utilisant

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

l'entrée est faite dans le tableau mais je reçois 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 hibernate verra ces exceptions (même si les insertions ont été faites) et l'application se plantera.

225voto

Phyxx Points 3064

Cela est dû au fait que STRICT_TRANS_TABLES Le mode SQL défini dans le

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

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

98voto

Ouvrez phpmyadmin et allez dans l'onglet 'More' 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'. Sauvegardez-le.

46voto

Kamil Points 443

Dans phpmyadmin, effectuez les opérations suivantes :

select @@GLOBAL.sql_mode

Dans mon cas, j'obtiens 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 . Ensuite, effectuez 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'

37voto

KinSlayerUY Points 351

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

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

31voto

Kingsley Ijomah Points 193

Lorsque 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 à ceci :

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

Commentez la ligne ci-dessus et redémarrez le serveur mysql.

mysql.server restart

L'erreur a disparu !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X