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

mah*_*off 22 mysql database-connection ruby-on-rails strict ruby-on-rails-4

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

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

nim*_*lla 22

您可以使用strict: false以下命令在database.yml中设置严格模式:

production:
  host: ...
  username: ...
  strict: false
Run Code Online (Sandbox Code Playgroud)

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


Gra*_*eme 7

mysql2创业板公开到执行的选项上连接初始命令,然后重新连接.你可以init_command从里面设置database.yml:

production:
  host: ...
  username: ...
  init_command: "SET @@SESSION.sql_mode = ''"
Run Code Online (Sandbox Code Playgroud)


mah*_*off 6

按照@edubriguenti 的回答,我找到了这个。在那里应用帖子和评论,我添加了以下内容,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!
Run Code Online (Sandbox Code Playgroud)


Ary*_*rya 5

您可以将此添加到数据库中。

变量:
   sql_mode:“传统”

要么

变量:
   strict_mode:假

看到:

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