Windows MySQL v5 génère une erreur, mais Linux et les autres versions ne déclenchent qu'un avertissement. Cela doit être corrigé. WTF?
Voir également une tentative pour résoudre ce problème en tant que bogue # 19498 dans MySQL Bugtracker:
Bryce Nesbitt le 4 avril 2008 16h36:
Sous MS Windows, la règle "no DEFAULT" est une erreur, alors que sur d'autres plates-formes, c'est souvent un avertissement. Bien que ce ne soit pas un bogue, il est possible d'être piégé par cela si vous écrivez du code sur une plate-forme clémente, puis l'exécutez sur une plate-forme stricte:
Personnellement, je considère cela comme un bug. La recherche de "La colonne BLOB / TEXT ne peut pas avoir de valeur par défaut" renvoie environ 2 940 résultats sur Google. La plupart d'entre eux sont des rapports d'incompatibilités lors de la tentative d'installation de scripts DB fonctionnant sur un système mais pas sur d'autres.
Je rencontre le même problème maintenant sur une application Web que je modifie pour l'un de mes clients, initialement déployée sur Linux MySQL v5.0.83-log. J'utilise Windows MySQL v5.1.41. Même en essayant d'utiliser la dernière version de phpMyAdmin pour extraire la base de données, il ne signale pas de valeur par défaut pour la colonne de texte en question. Pourtant, lorsque j'essaie d'exécuter une insertion sur Windows (cela fonctionne bien sur le déploiement Linux), je reçois une erreur sans défaut sur la colonne ABC. J'essaie de recréer la table localement avec la valeur par défaut évidente (basée sur une sélection de valeurs uniques pour cette colonne) et finis par recevoir la colonne BLOB / TEXT si utile ne peut pas avoir de valeur par défaut .
Encore une fois, ne pas maintenir la compatibilité de base entre les plates-formes est inacceptable et constitue un bogue.
Comment désactiver le mode strict dans MySQL 5 (Windows):
Modifiez /my.ini et recherchez la ligne
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
Remplacez-le par
sql_mode='MYSQL40'
Redémarrez le service MySQL (en supposant qu'il s'agit de mysql5)
net stop mysql5
net start mysql5
Si vous avez un accès root / admin, vous pourrez peut-être exécuter
mysql_query("SET @@global.sql_mode='MYSQL40'");