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.
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='';