Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Rails 3.2 + MySQL:Błąd:Pole 'created_at' nie ma wartości domyślnej:INSERT INTO

Właśnie natknąłem się na coś podobnego na świeżej instalacji MySql na Mac OS.

W końcu zawęziłem to do kombinacji nowszych wersji MySql, które domyślnie włączają „tryb ścisły”, a mój projekt ma tabelę z pewnymi wątpliwymi ograniczeniami. Ta tabela była „tablicą łączenia” używaną w :has_and_belongs_to_many relacja. W jakiś sposób ta tabela została utworzona za pomocą :created_at i :updated_at atrybuty, które miały ograniczenie :null => false na nich. Railsy 3.2 nie wypełniają automatycznie pól znacznika czasu dla tabel złączeń :habtm relacje. Gdy tryb ścisły jest wyłączony, MySql po prostu wypełni kolumny z wyzerowanymi datami, np. 0000-00-00 00:00:00 . Po włączeniu trybu ścisłego zgłasza wyjątek.

Aby rozwiązać ten problem, przeprowadziłem migrację, aby pola sygnatury czasowej były puste. Tak:

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

Szczerze mówiąc, prawdopodobnie lepiej jest po prostu usunąć kolumny, jeśli ich nie potrzebujesz, ale mamy kilka specjalnych przypadków, w których są one ustawiane ręcznie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PDO::Query() zwraca fałsz

  2. Python MySql Insert nie działa

  3. Laravel 'nie może znaleźć sterownika (SQL:wstaw do...'

  4. Polecenie SQL do wyświetlenia i wyświetlenia wszystkich baz danych w MySQL i MariaDB

  5. Group_Concat w Concat nie działa z wartościami NULL