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.

0voto

Sasindu Points 1

Je pense que la colonne des noms a des valeurs nulles dans ce cas.

update try set name='abc' where created_by='def';

0voto

M.Paunov Points 482

J'utilise Xampp 7.3.28-1 pour Linux. Il utilise MariaDB 10.4.19. Son fichier de configuration est : /opt/lampp/etc/my.cnf

Il ne contient PAS d'entrée définissant sql_mode. Cependant, la requête "select @@GLOBAL.sql_mode ;" renvoie un résultat qui contient la problématique STRICT_TRANS_TABLES. Je suppose que c'est par défaut maintenant.

Ma solution a été de définir explicitement le mode en ajoutant cette ligne sous [mysqld] : sql_mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

Vous pouvez définir les modes dont vous avez besoin ou laisser le champ vide.

0voto

spinstaUSA Points 19

J'ai constaté qu'une fois que j'ai supprimé ce qui était un doublement d'une clé étrangère et d'une clé primaire, alors que j'aurais pu simplement utiliser la clé étrangère comme clé primaire seule dans la table. Tout mon code a alors fonctionné et j'ai pu télécharger sur db.

0voto

Peter Maly Points 21

Ceci est destiné aux utilisateurs de l'appareil SYNOLOGY :


  • Comment définir les variables globales (mode strict désactivé) sur le dispositif SYNOLOGY.
    (vérifié sur DSM 7.0.1-42218 - modèle de dispositif DS418)

J'ai utilisé PUTTY pour me connecter :
se connecter en tant que Racine et
sudo su après... (à administrer totalement)

  • s'il n'existe pas, créez mon.cnf dans :

MariaDB 5 :
/var/packages/MariaDB/etc
MariaDB 10 :
/var/packages/MariaDB10/etc

  • ceci devrait être dans le fichier (au moins pour le mode strict désactivé)

    custom configs

    [mysqld] innodb_strict_mode = OFF sql_mode = ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

  • redémarrer le démon mysqld :
    MariaDB 5 :
    /usr/syno/bin/synopkg restart MariaDB
    MariaDB 10 :
    /usr/syno/bin/synopkg restart MariaDB10

  • vérifiez si le mode strict est activé dans ces deux options globales - les deux devraient être absentes ou désactivées (voir la configuration ci-dessus)

  • connectez-vous à mysql :
    mysql -u Root -p

  • entrer le mot de passe :

afficher des variables comme 'sql_mode' ;
afficher des variables comme '%STRICT%' ;


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