新手问题 MySQL 5.7 与 rails db:migrate 的日期格式问题

syutran · 2017年04月13日 · 最后由 kgen 回复于 2017年04月13日 · 1441 次阅读
class ChangeColumnTypeToDevices < ActiveRecord::Migration [5.0]
  def change
    change_column :devices, :status, :integer
  end
end

执行

rails db:migrate

报错:

Mysql2::Error: Incorrect datetime value: '0000-00-00 00:00:00' for column 'created_at' at row 1 
......

G 了好长时间,确定是 MySQL 5.7 的空日期配置不接收 0000-00-00 00:00:00 这样的格式,解决办法:

用 root 登录到 MySQL,修改一下配置参数就 OK 了

>mysql -uroot -p devices
>SET GLOBAL sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

MARK!

看起来像是 Rails 默认行为和 MySQL 5.7 的冲突啊!

修改 sql_mode 可以解决的很多兼容问题,但是要考虑性能问题。5.7 有一些修改是为了性能,改成兼容 5.6 的模式时,性能会明显下降。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号