Rails 4にアップグレードすると、Rails接続に対してMySQLstrictモードがデフォルトでオンになっているようです。これは、255文字を超える文字列値を保存すると、Railsアプリで「Mysql2 :: Error:Data too long forcolumn」が発生するためです。それでも、同じクエリをMySQLコンソール(グローバルストリクトモードがオフであると報告されている)に貼り付けると、切り捨ての警告が表示されるだけで正常に機能します。さらなる証拠として、 ここに 「Rails4は両方ともデフォルトで厳密モードを使用します」と書かれています。
私の質問は、Railsアプリから厳密モードをオフにするにはどうすればよいですか?今はそれをサポートするためにすべてをアップグレードするのは避けたいです。
次のようにstrict: false
を使用して、database.ymlでstrictモードを設定できます。
production:
Host: ...
username: ...
strict: false
http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/MysqlAdapter.html
mysql2
gemは、 接続および再接続時の初期コマンド を実行するオプションを公開します。 init_command
はdatabase.yml
の内部から設定できます。
production:
Host: ...
username: ...
init_command: "SET @@SESSION.sql_mode = ''"
これをdatabase.ymlに追加できます
変数: sql_mode: '従来の'
または
変数: strict_mode:false
見る:
@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!
@aryaの答えは、'traditional'
sql mode is strict、非strictに設定する場合は、次のことを試してください。
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