SQL_MODE STRICT_TRANS_TABLES

+4 votes
5,135 vues
question 11 Février 17 dans serveur Mysql par lpf (113 points)  
editée 11 Février 17 par lpf

C'est bien d'avoir du code propre et d'utiliser ce genre de paramètres quand on installe Mysql sur un serveur.

A la suite de quoi, sans aucun avertissement, les champs sans valeur par défaut non alimentés dans un insert génèrent une erreur bloquante. Adieu boulot, clients et jolies stats ... 

J'ai trouvé 3 solutions :

  • Mettre des valeurs par défaut dans tous les champs des tables
  • ou bien ajouter à la fonction connect la ligne $mysqli->query("SET SESSION sql_mode = '' ;")
  • ou bien 123 retire le SQL_MODE STRICT_TRANS_TABLES de my.cnf

On vote ? Je soutiens l'option 3 et gagne d'avance ...

 

commentée 11 Février 17 par atlas (293 points)  
Ce n'est pas une question mais une question solution. Bravo +10
commentée 11 Février 17 par anvers (269 points)  
@Atlas: tu n'as rien vu non plus ? Je n'ai pas été impacté mais quelle jolie trouvaille ... ladmin à l'amende now()

1 Réponse

0 votes
réponse 11 Février 17 par ladmin (2,277 points)  
editée 19 Février 17 par ladmin

mea culpa

En effet, ajouter ce paramètre sans crier gare a été une erreur. Nous aurions du mieux évaluer son impact.

L'option a été retirée de toutes les configurations que nous gérons sauf sur les serveurs dédiés où il n'y a aucune erreur caractérique de cette option dans les logs.

A l'avenir, nous veillerons à ne plus nous laisser surprendre par les améliorations bloquantes.

Edit : le retirer de my.cnf n'a pas suffi car ce sont des valeurs par défaut. Mais c'est une variable dynamique et donc elle est maintenant corrigée et active. La ligne corrective va être ajoutée au script d'initialisation des bases afin de ne plus en entendre parler.

Edit :Pour ceux qui tomberont dessus. Effectuez la recherche de my.cnf sous usr ( pas celui sous /etc/mysql/ ) : find /usr -type f -name my.cnf . C'est parfois /usr/my.cnf ou bien /usr/local/mysql/my.cnf . Puis éditez ce fichier de valeurs par défaut de /etc/mysql/my.cnf et notamment la variable sql_mode. Après les mises à jour, vérifiez que l'installateur ne l'a pas remplacée par la version originale.

commentée 11 Février 17 par jmlb (169 points)  
quand c'est bien ladmin dit "je" et quand ça buggue "nous"
commentée 11 Février 17 par ladmin (2,277 points)  
humm ... simple question de logique. Info : "Je" ou "X" agit , info contraire : "personne" n'a agi ou bien encore "nous" n'avons pas agi.
commentée 19 Février 17 par anvers (269 points)  
sur debian, c'est /usr/my.cnf. Ce sont les valeurs par défaut de l'autre ... juste pour enquiquiner le mainteneur :)
Feel free to ask and answer in english

Bienvenue sur les FAQ de 123.fr, posez vos questions ou répondez à celles des autres usagers.

...