Windows MySQL v5 ger ett fel men Linux och andra versioner ger bara en varning. Detta måste fixas. WTF?
Se även ett försök att fixa detta som bugg #19498 i MySQL Bugtracker:
Bryce Nesbitt den 4 april 2008 16:36:
På MS Windows är regeln "ingen DEFAULT" ett fel, medan det på andra plattformar ofta är en varning. Även om det inte är en bugg, är det möjligt att fastna i detta om du skriver kod på en mild plattform och senare kör den på en strikt plattform:
Personligen ser jag detta som en bugg. Om du söker efter "kolumnen BLOB/TEXT kan inte ha ett standardvärde" returneras cirka 2 940 resultat på Google. De flesta av dem är rapporter om inkompatibilitet när man försöker installera DB-skript som fungerade på ett system men inte på andra.
Jag stöter på samma problem nu på en webbapp som jag modifierar för en av mina klienter, ursprungligen distribuerad på Linux MySQL v5.0.83-log. Jag kör Windows MySQL v5.1.41. Även om man försöker använda den senaste versionen av phpMyAdmin för att extrahera databasen, rapporterar den inte en standard för textkolumnen i fråga. Men när jag försöker köra en infogning på Windows (som fungerar bra på Linux-distributionen) får jag ett felmeddelande om ingen standard i ABC-kolumnen. Jag försöker återskapa tabellen lokalt med den uppenbara standarden (baserat på ett urval av unika värden för den kolumnen) och slutar med att jag får den ack så användbara BLOB/TEXT-kolumnen kan inte ha ett standardvärde .
Återigen, att inte upprätthålla grundläggande kompatibilitet mellan plattformar är oacceptabelt och är en bugg.
Hur man inaktiverar strikt läge i MySQL 5 (Windows):
-
Redigera /my.ini och leta efter linje
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
-
Ersätt den med
sql_mode='MYSQL40'
-
Starta om MySQL-tjänsten (förutsatt att det är mysql5)
net stop mysql5 net start mysql5
Om du har root/admin-åtkomst kanske du kan köra
mysql_query("SET @@global.sql_mode='MYSQL40'");