14

升級到Rails 4後,默認情況下,MySQL嚴格模式現在默認用於Rails連接。我這樣說是因爲我的Rails應用程序在保存字符串值超過255個字符時出現「Mysql2 :: Error:Data for long for column」。然而,我將相同的查詢粘貼到MySQL控制檯(其中全局嚴格模式被報告關閉)並且它工作正常,只是截斷警告。作爲進一步的證據,it says here「Rails 4默認使用嚴格模式」。如何關閉Rails中的MySQL嚴格模式

我的問題是如何從Rails應用程序中關閉嚴格模式?我寧願避免升級所有的東西來支持它。

回答

2

您可以添加到您的database.yml

 
variables: 
    sql_mode: 'traditional' 

 
variables: 
    strict_mode: false 

參見:

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

+0

這沒有遺憾的工作。我試過'innodb_strict_mode'(這是實際的變量),但將其設置爲「OFF」或false在保存記錄時仍然會導致此錯誤。奇怪的是變量被識別,因爲如果我在同一個地方嘗試任何隨機變量名稱,它會在Rails啓動時引發異常。 – mahemoff

+0

爲我工作。另請參閱https://github.com/rails/rails/issues/25924瞭解最新的rails 5更改。 –

2

@arya的答案可能不是因爲'traditional' SQL工作模式嚴格的,如果你想將它設置爲不嚴格,試試這個:

sql_mode: '' 

希望幫助

+0

有意義,但不幸的是無法正常工作。同樣的錯誤。 – mahemoff

+0

因爲Rails 4.2而爲我工作。 –

1

試試這個:

# 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 
+0

這是一個很好的起點,但是會導致現代Rails出現錯誤。在我上面的回答中修改。 – mahemoff

3

繼@ edubriguenti的回答,I found this。應用帖子和評論,我添加了以下內容到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! 
+0

僅供參考,供將來的人看到這一點,這有時不適合我在軌道4.0.3 - 在生產中,sql_mode有時仍然設置爲嚴格。我會嘗試在database.yml中設置它,也許他們修復了這個設置。 – Kevin

+0

好的。這對我來說是4.1測試版。請更新database.yml的結果,因爲我還沒有嘗試它,它顯然是乾淨的,如果它的工作。 – mahemoff

+0

我開始有問題,它不再按預期進入嚴格模式。尋找@ nimblegorilla的答案正常工作。 – mahemoff