web-dev-qa-db-fra.com

erreur mysql 1364 Le champ 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 trigger 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

Existe-t-il un moyen de supprimer cette erreur sans rendre le champ nullable AND sans supprimer le déclencheur? Sinon, mon hibernate verra ces exceptions (même si les insertions ont été faites) et l'application se bloquera.

88
kk1957

Définissez une valeur par défaut pour Created_By (par exemple: empty VARCHAR) et le déclencheur mettra à jour la valeur quand même.

20
KinSlayerUY

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, voir http://dev.mysql.com/doc/refman/5.6/en/option-files.html pour connaître les autres emplacements possibles des fichiers de configuration.

183
Phyxx

Ouvrez phpmyadmin et allez sur 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.

80
Nilesh Dhangare

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

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

Commentez au-dessus de la ligne et redémarrez le serveur mysql

mysql.server restart

Erreur parti!

28
Kingsley Ijomah

Dans phpmyadmin, procédez comme suit:

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. Puis 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'
28
Kamil

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

SET SQL_MODE = '';

Je ne suis pas sûr que ce soit la meilleure solution,

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

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

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

puis redémarrez MySQL

7
Devraj Gupta

Pour Windows WampServer utilisateurs:

WAMP> MySQL> my.ini

fichier de recherche pour sql-mode=""

Décommentez-le.

6
Andrew

Cela semble être causé par un long-standing (depuis 2004) Un bogue (# 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, faisant en sorte que MySQL se comporte «selon le standard SQL» (ibid.).

5
B98

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 strict:

SET GLOBAL sql_mode='';
4
Damjan Pavlica

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

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

Lancer la console mysql:

mysql -u your_username -p

, sélectionnez la base de données:

USE your_database;

et lancez (aussi depuis la console mysql):

SET GLOBAL sql_mode='';

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

3
MilanG

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

Je ne voudrais pas simplement définir 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 depuis l'utilitaire de services. Ajoutez un commentaire pour les futurs programmeurs qui vous êtes et ce que vous avez fait. 

0
Bill Degnan

j'ai résolu le problème de modification du fichier my.ini situé dans le dossier de données. Pour mysql 5.6, le fichier my.ini a été transféré dans le dossier de données plutôt que dans le dossier d'installation bin ou mysql.

0
sadik keskin

je règle les champs sur null et le problème résolu, il est mis à jour lorsqu’une information est commandée pour y stocker, plus aucun message msqli indiquant que le champ était vide cus vous n’avez pas inséré de valeur, l’application de cette solution peut fonctionner sur certains projets dépend de la structure de votre projet.

0
ExploreTech

Bien qu'il y ait beaucoup de réponses, j'ajouterai le mien… .. J'ai aussi eu cette erreur en essayant d'ajouter un livre à ma table books.

dans mon cas, le champ nommé issued a été attribué à INT(10) NOT NULL. signifie que ce champ était supposé prendre une valeur entière . Je viens de changer la valeur NOT NULL en as_defined et la valeur par défaut 0. et cela a fonctionné pour moi.

Utilisez cette option si vous avez affaire à une valeur entière dans ce champ ou si vous souhaitez effectuer certaines opérations ultérieurement dans la valeur de ce champ.

0
Hefaz