如何在Rails中关闭MySQL严格模式

升级到Rails 4,似乎MySQL严格模式现在默认为Rails连接。 我这样说是因为我的Rails应用程序在保存超过255个字符的字符串值时会收到“Mysql2 :: Error:数据太长了”。 然而,我将相同的查询粘贴到MySQL控制台(其中报告全局严格模式已关闭)并且它正常工作,只是截断警告。 作为进一步的证据, 它在这里说 “Rails 4默认使用严格模式”。

我的问题是如何从Rails应用程序中关闭严格模式? 我宁愿避免升级所有东西来支持它。

您可以使用strict: false在database.yml中设置严格模式,如下所示:

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

http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/MysqlAdapter.html

您可以将其添加到database.yml中

变量:
    sql_mode:'传统'

要么

变量:
    strict_mode:false

看到:

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

按照@ edubriguenti的回答, 我找到了这个 。 在那里应用post和评论,我将以下内容添加到environment.rb ,它看起来已经解决了问题。

 # 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! 

mysql2 gem公开了一个在连接和重新连接时执行初始命令的选项。 您可以从database.yml设置init_command

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

@arya的答案可能不起作用,因为'traditional' sql模式严格的,如果你想把它设置为非严格,试试这个:

 sql_mode: '' 

希望有所帮助

试试这个:

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