sql >> Databasteknik >  >> RDS >> Mysql

Rails 3.2 + MySQL:Fel:Fältet 'created_at' har inte ett standardvärde:INSERT INTO

Jag stötte precis på något liknande på en nyinstallation av MySql på Mac OS.

Jag har äntligen begränsat det till kombinationen av nyare versioner av MySql som aktiverar "strikt läge" som standard, och mitt projekt har en tabell med några tvivelaktiga begränsningar. Tabellen i fråga var "join-tabellen" som användes i en :has_and_belongs_to_many relation. På något sätt hade den tabellen skapats med :created_at och :updated_at attribut som hade en begränsning av :null => false på dem. Rails 3.2 fyller inte automatiskt i tidsstämpelfälten för kopplingstabeller för :habtm relationer. När strikt läge är avstängt kommer MySql bara att fylla kolorna med nollställda datum, som 0000-00-00 00:00:00 . Med strikt läge aktiverat ger det ett undantag.

För att åtgärda problemet körde jag en migrering för att tillåta tidsstämpelfälten att vara null. Så här:

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

Ärligt talat är det förmodligen bättre att bara släppa kolumnerna om du inte behöver dem, men vi har ett par speciella fall där de faktiskt ställs in manuellt.



  1. Hur ändrar man en sträng till ett datum under import med Sequel Pro?

  2. Hur man beräknar procent med en SQL-sats

  3. Köra SQL-databasunderhållsuppgifter med SQLCMD

  4. Hur lagrar man bilder i en varbinär(max) kolumn?