Windows MySQL v5 gibt einen Fehler aus, aber Linux und andere Versionen geben nur eine Warnung aus. Dies muss behoben werden. WTF?
Sehen Sie auch einen Versuch, dies als Fehler # 19498 im MySQL Bugtracker zu beheben:
Bryce Nesbitt am 4. April 2008, 16:36 Uhr:
Unter MS Windows ist die Regel "no DEFAULT" ein Fehler, während sie auf anderen Plattformen häufig eine Warnung darstellt. Obwohl dies kein Fehler ist, ist es möglich, dass Sie davon erfasst werden, wenn Sie Code auf einer milden Plattform schreiben und ihn später auf einer strengen Plattform ausführen:
Persönlich sehe ich das als Fehler an. Wenn Sie nach "BLOB / TEXT-Spalte kann keinen Standardwert haben" suchen, werden bei Google etwa 2.940 Ergebnisse zurückgegeben. Bei den meisten handelt es sich um Berichte über Inkompatibilitäten beim Versuch, DB-Skripts zu installieren, die auf einem System funktionieren, auf anderen jedoch nicht.
Ich habe jetzt das gleiche Problem mit einer Webanwendung, die ich für einen meiner Clients ändere und die ursprünglich unter Linux MySQL v5.0.83-log bereitgestellt wurde. Ich verwende Windows MySQL v5.1.41. Selbst wenn versucht wird, die neueste Version von phpMyAdmin zum Extrahieren der Datenbank zu verwenden, wird kein Standard für die betreffende Textspalte gemeldet. Wenn ich jedoch versuche, eine Einfügung unter Windows auszuführen (was bei der Linux-Bereitstellung problemlos funktioniert), wird in der ABC-Spalte der Fehler "Keine Standardeinstellung" angezeigt. Ich versuche, die Tabelle lokal mit dem offensichtlichen Standardwert neu zu erstellen (basierend auf einer Auswahl eindeutiger Werte für diese Spalte) und erhalte am Ende die ach so nützliche BLOB / TEXT-Spalte, die keinen Standardwert haben kann .
Auch hier ist es nicht akzeptabel, die grundlegende Kompatibilität zwischen Plattformen nicht aufrechtzuerhalten, und dies ist ein Fehler.
So deaktivieren Sie den strengen Modus in MySQL 5 (Windows):
Bearbeiten Sie /my.ini und suchen Sie nach einer Zeile
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
Ersetzen Sie es durch
sql_mode='MYSQL40'
Starten Sie den MySQL-Dienst neu (vorausgesetzt, es handelt sich um mysql5).
net stop mysql5
net start mysql5
Wenn Sie Root- / Administratorzugriff haben, können Sie möglicherweise ausführen
mysql_query("SET @@global.sql_mode='MYSQL40'");