How to turn off MySQL strict mode in Rails

Following @edubriguenti's answer, I found this. Applying the post and the comment there, I added the following to environment.rb and it looks to have solved the problem.

# Set MySQL to clear sql mode for all connections
class ActiveRecord::ConnectionAdapters::Mysql2Adapter 
  alias :connect_no_sql_mode :connect
  def connect
    connect_no_sql_mode
    execute("SET sql_mode = ''")
  end
end

ActiveRecord::Base.connection.reconnect!

You can set strict mode in your database.yml using strict: false as follows:

production:
  host: ...
  username: ...
  strict: false

https://api.rubyonrails.org/v4.2.8/classes/ActiveRecord/ConnectionAdapters/MysqlAdapter.html


The mysql2 gem exposes an option to execute an initial command on connect and reconnect. You can set the init_command from inside database.yml:

production:
  host: ...
  username: ...
  init_command: "SET @@SESSION.sql_mode = ''"

You can add this to your database.yml

variables:
   sql_mode: 'traditional'

or

variables:
   strict_mode: false

See:

https://github.com/rails/rails/pull/8346