Désactiver le mode STRICT_ALL_TABLES sur phpMyAdmin
L’utilisation puriste de MySQL voudrait que la structure d’un champ ne permette pas qu’il soit vide. En d’autre terme tout champ devrait avoir une valeur par défaut en cas d’insertion vide, ou comporter la valeur NULL.
La plupart des versions de phpMyAdmin tolèrent, en fait, les insertions de champs vides. Lorsque vous insérez par exemple un champ de date vide, l’application insère à la place ‘0000-00-00’.
Toutefois il peut arriver qu’un mise à jour de phpMyAdmin (ou de Wamp, en local, par exemple) entraine des messages d’erreur voire des blocages d’insertion. Il faut en ce cas désactiver le mode STRICT_ALL_TABLES sur phpMyAdmin, c’est très simple à faire.
La solution la plus pure serait de reprendre la structure de toutes ses tables pour y traquer champ par champ les structures déficientes. Cela peut-être long…
L’autre solution consiste à s’assoir un peu sur ses principes et à demander à MySQL de faire de même !
1ere étape : accéder à la variable ‘sql mode’
– Ouvrir phpMyAdmin
– Sélectionner l’icône ‘home’ de phpMyAdmin :
– Dans la liste des onglets qui s’affichent en haut de la page, cliquer sur ‘Variables’. On accède ici au moteur de ce bon logiciel de gestion des bases de données.
– Dans le champ filtre qui s’affiche alors, écrire ‘sql mode‘. Le champ apparait aussitôt sans rechargement de la page (c’est beau, l’objet XMLHttpRequest :))
2nde étape : désactiver le mode STRICT_ALL_TABLES
– Sélectionner la ligne « sql mode » et cliquer sur le lien « modifier » qui apparait au milieu.
– On constate alors que cette variable prend par défaut la valeur « STRICT_ALL_TABLES », c’est à dire que phpMyAdmin se voit intimer l’ordre de vérifier si les champs ne sont strictement pas vides; ou dans le cas contraire si le bon développeur que vous êtes n’a pas oublié de lui donner une valeur par défaut lors de la création de ses tables …
La suite est simple : effacer cette valeur STRICT_ALL_TABLES », et cliquer sur la petite disquette de sauvegarde (qui utilise encore des disquettes 3,5 pouces pour sauvegarder ses données ?!)
Redémarrez votre serveur, et tout rentre dans l’ordre.
Il peut toutefois arriver qu’à chaque redémarrage de l’application cette variable par défaut soit à nouveau renseignée à STRICT_ALL_TABLES. Cela m’est arrivé une fois sur un serveur local : la seule solution que j’avais trouvé avait été de mettre à jour la version de MySQL, qui semblait avoir un problème de compatibilité avec la version de PHP du serveur… Mais c’est une autre affaire !
super,
merci beaucoup.
Merci beaucoup pour votre publication. J’ai passé plus d’une journée à essayer de comprendre pourquoi mysql acceptait les valeurs nulles alors que je l’avais interdit. Et j’ai enfin trouvé la solution chez vous!! Bravo pour votre magnifique travail et l’aide que vous apportez aux développeurs en détresse