Acabei de encontrar algo semelhante em uma nova instalação do MySql no Mac OS.
Eu finalmente reduzi para a combinação de versões mais recentes do MySql ativando o "modo estrito" por padrão, e meu projeto tendo uma tabela com algumas restrições questionáveis. A tabela em questão era a "tabela de junção" usada em um
:has_and_belongs_to_many
relação. De alguma forma, essa tabela foi criada com :created_at
e :updated_at
atributos que tinham uma restrição de :null => false
neles. Rails 3.2 não preenche automaticamente os campos de timestamp para tabelas de junção de :habtm
relacionamentos. Quando o modo estrito está desativado, o MySql apenas preencherá as colunas com datas zeradas, como 0000-00-00 00:00:00
. Com o modo estrito ativado, ele gera uma exceção. Para corrigir o problema, executei uma migração para permitir que os campos de carimbo de data e hora fossem nulos. Assim:
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
Honestamente, provavelmente é melhor simplesmente descartar as colunas se você não precisar delas, mas temos alguns casos especiais em que elas são definidas manualmente.