sql >> Database teknologi >  >> RDS >> Mysql

Rails 3.2 + MySQL:Fejl:Feltet 'created_at' har ikke en standardværdi:INSERT INTO

Jeg er lige stødt på noget lignende på en ny installation af MySql på Mac OS.

Jeg indsnævrede det endelig til kombinationen af ​​nyere versioner af MySql, der aktiverer "streng tilstand" som standard, og mit projekt har en tabel med nogle tvivlsomme begrænsninger. Den pågældende tabel var "join-tabellen", der blev brugt i en :has_and_belongs_to_many forhold. På en eller anden måde var den tabel blevet oprettet med :created_at , og :updated_at attributter, der havde en begrænsning på :null => false på dem. Rails 3.2 udfylder ikke automatisk tidsstempelfelterne for jointabeller i :habtm relationer. Når streng tilstand er slået fra, vil MySql blot udfylde kolonnerne med nulstillede datoer, såsom 0000-00-00 00:00:00 . Med streng tilstand slået til rejser det en undtagelse.

For at løse problemet kørte jeg en migrering for at tillade tidsstempelfelterne at være nul. Sådan:

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

Helt ærligt, det er nok bedre bare at droppe kolonnerne, hvis du ikke har brug for dem, men vi har et par specielle tilfælde, hvor de faktisk bliver indstillet manuelt.



  1. Hvordan læser jeg en , som <br /> i PHP/MySQL?

  2. VÆLG EN række med MAX()-værdien i en kolonne

  3. Mysql Opret database med specialtegn i navnet

  4. Mærkelig Mysql-fejl 1111, virkede angiveligt før