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

Rails 3.2 + MySQL:Fehler:Feld 'created_at' hat keinen Standardwert:INSERT INTO

Ich bin gerade bei einer Neuinstallation von MySql unter Mac OS auf etwas Ähnliches gestoßen.

Ich habe es schließlich auf die Kombination neuerer Versionen von MySql eingegrenzt, die standardmäßig den "strikten Modus" aktivieren, und mein Projekt hat eine Tabelle mit einigen fragwürdigen Einschränkungen. Die fragliche Tabelle war die "Join-Tabelle", die in einem :has_and_belongs_to_many verwendet wurde Beziehung. Irgendwie wurde diese Tabelle mit :created_at erstellt , und :updated_at Attribute, die eine Einschränkung von :null => false hatten auf sie. Rails 3.2 füllt die Zeitstempelfelder für Join-Tabellen von :habtm nicht automatisch Beziehungen. Wenn der strikte Modus deaktiviert ist, füllt MySql die Spalten nur mit auf Null gesetzten Daten, wie 0000-00-00 00:00:00 . Wenn der strikte Modus aktiviert ist, wird eine Ausnahme ausgelöst.

Um das Problem zu beheben, habe ich eine Migration durchgeführt, um zuzulassen, dass die Zeitstempelfelder null sind. So:

class ChangeNullableForTimestampsOnThing1sThing2s < ActiveRecord::Migration
  def up
    change_column(:thing1s_thing2s, :created_at, :datetime, :null => true)
    change_column(:thing1s_thing2s, :updated_at, :datetime, :null => true)
  end

  def down
    change_column(:thing1s_thing2s, :created_at, :datetime, :null => false)
    change_column(:thing1s_thing2s, :updated_at, :datetime, :null => false)
  end
end

Ehrlich gesagt ist es wahrscheinlich besser, die Spalten einfach zu löschen, wenn Sie sie nicht benötigen, aber wir haben ein paar Sonderfälle, in denen sie tatsächlich manuell gesetzt werden.