sql >> Databasteknik >  >> RDS >> Mysql

Varför kan inte en textkolumn ha ett standardvärde i MySQL?

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'");


  1. SQL-datatyper:5 värsta val du måste sluta med idag

  2. StarJoinInfo i utförandeplaner

  3. Ändra lösenordet på SA-inloggningen i SQL Server (T-SQL-exempel)

  4. Ta bort sql-rader där ID:n inte har en matchning från en annan tabell