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.

6voto

B98 Points 980

Cela semble être causé par un depuis longtemps (depuis 2004) bogue (#6295) dans MySQL , intitulé

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

Il a été prétendument corrigé dans la version 5.7.1 de MySQL (Changelog, dernière entrée) en 2013, faisant en sorte que MySQL se comporte comme "selon la norme SQL" (ibid).

6voto

Andrew Points 6859

Pour Windows WampServer utilisateurs :

WAMP > MySQL > my.ini

fichier de recherche pour sql-mode=""

Décommentez-le.

3voto

Bill Degnan Points 11

Dans Windows Server, éditez my.ini (par exemple, les fichiers de programme \mysql\mysql serveur n.n \my.ini )

Je ne me contenterais pas de définir sql-mode="", je suggère plutôt de supprimer STRICT_TRANS_TABLES de la ligne, de laisser tout en l'état, puis de redémarrer MySQL à partir de l'utilitaire de services. Ajoutez un commentaire pour que les futurs programmeurs sachent qui vous êtes et ce que vous avez fait.

1voto

ExploreTech Points 11

J'ai défini les champs comme non nuls et le problème est résolu, il se met à jour lorsqu'une information est commandée pour être stockée dans le champ, il n'y a plus de message msqli montrant que le champ était vide parce que vous n'avez pas inséré de valeur dans le champ, l'application de cette solution peut fonctionner sur certains projets, cela dépend de la structure de votre projet.

0voto

sadik keskin Points 1

J'ai résolu le problème en changeant le fichier my.ini situé dans le dossier data. pour mysql 5.6 le fichier my.ini a été déplacé dans le dossier data plutôt que dans le dossier bin ou le dossier d'installation de mysql.

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