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