sql >> Database >  >> RDS >> Mysql

Rails 3.2 + MySQL:Fout:Veld 'created_at' heeft geen standaardwaarde:INSERT INTO

Ik kwam net iets soortgelijks tegen bij een nieuwe installatie van MySql op Mac OS.

Ik heb het uiteindelijk teruggebracht tot de combinatie van nieuwere versies van MySql die standaard de "strikte modus" inschakelen, en mijn project met een tabel met een aantal twijfelachtige beperkingen erop. De tabel in kwestie was de "join table" die werd gebruikt in een :has_and_belongs_to_many relatie. Op de een of andere manier was die tabel gemaakt met :created_at , en :updated_at attributen met een beperking van :null => false op hen. Rails 3.2 vult niet automatisch de tijdstempelvelden voor samenvoegtabellen van :habtm verhoudingen. Wanneer de strikte modus is uitgeschakeld, zal MySql de cols gewoon vullen met nuldatums, zoals 0000-00-00 00:00:00 . Als de strikte modus is ingeschakeld, ontstaat er een uitzondering.

Om het probleem op te lossen, heb ik een migratie uitgevoerd om de tijdstempelvelden nul te laten zijn. Zoals dit:

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

Eerlijk gezegd is het waarschijnlijk beter om de kolommen gewoon weg te laten als je ze niet nodig hebt, maar we hebben een aantal speciale gevallen waarin ze handmatig worden ingesteld.



  1. Mysql transacties binnen transacties

  2. PgBouncer 1.7 - "Kleuren variëren na opstanding"

  3. Uitvoer krijgen van dbms_output.get_lines met behulp van JDBC

  4. Wat is de maximale grootte van VARCHAR2 in PL/SQL en SQL?