Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Warum kann eine Textspalte in MySQL keinen Standardwert haben?

Windows MySQL v5 wirft einen Fehler, aber Linux und andere Versionen geben nur eine Warnung aus. Dies muss behoben werden. WTF?

Siehe auch einen Versuch, dies als Fehler #19498 im MySQL Bugtracker zu beheben:

Bryce Nesbitt am 4. April 2008 16:36:
Unter MS Windows ist die "no DEFAULT"-Regel ein Fehler, während sie auf anderen Plattformen oft eine Warnung ist. Obwohl es sich nicht um einen Fehler handelt, ist es möglich, dass Sie davon abgefangen werden, wenn Sie Code auf einer nachsichtigen Plattform schreiben und ihn später auf einer strengen Plattform ausführen:

Ich persönlich sehe das als Bug an. Die Suche nach „BLOB/TEXT-Spalte darf keinen Standardwert haben“ liefert etwa 2.940 Ergebnisse bei Google. Die meisten davon sind Berichte über Inkompatibilitäten beim Versuch, DB-Skripte zu installieren, die auf einem System funktionierten, aber nicht auf anderen.

Ich stoße jetzt auf dasselbe Problem bei einer Webanwendung, die ich für einen meiner Clients ändere, die ursprünglich auf Linux MySQL v5.0.83-log bereitgestellt wurde. Ich verwende Windows MySQL v5.1.41. Selbst beim Versuch, die neueste Version von phpMyAdmin zum Extrahieren der Datenbank zu verwenden, wird kein Standardwert für die betreffende Textspalte gemeldet. Wenn ich jedoch versuche, eine Einfügung unter Windows auszuführen (das funktioniert gut bei der Linux-Bereitstellung), erhalte ich einen Fehler ohne Standardwert in der ABC-Spalte. Ich versuche, die Tabelle lokal mit dem offensichtlichen Standard 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 kann keinen Standardwert haben .

Auch hier ist es inakzeptabel und ein Fehler, die grundlegende Kompatibilität zwischen Plattformen nicht aufrechtzuerhalten.

So deaktivieren Sie den strikten Modus in MySQL 5 (Windows):

  • Bearbeiten Sie /my.ini und suchen Sie nach der 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 ist mysql5)

    net stop mysql5
    net start mysql5
    

Wenn Sie Root-/Admin-Zugriff haben, können Sie möglicherweise

ausführen
mysql_query("SET @@global.sql_mode='MYSQL40'");