Upgrading to Rails 4, it seems MySQL strict mode is now on by default for Rails connections. I say this because my Rails app is getting "Mysql2::Error: Data too long for column" when saving a string value longer than 255 characters. Yet, I paste the same query into MySQL console (where global strict mode is reported to be off) and it works fine, just with truncation warnings. As further evidence, it says here "Rails 4 both use strict mode by default".
My question is how can I turn strict mode off from the Rails app? I'd rather avoid upgrading everything to support it right now.
You can also enable or disable InnoDB strict mode at run time with the statement SET [GLOBAL|SESSION] innodb_strict_mode= mode , where mode is either ON or OFF . Changing the GLOBAL setting requires the SUPER privilege and affects the operation of all clients that subsequently connect.
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 = ''"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With