背景
railsアプリのdatabase接続設定でDBアダプタがsqlite3とpostgresqlの場合はprepare statement設定はデフォルトで有効になっているが、mysql2の場合は無効になっていた。
対応
DBアダプタ間で設定に一貫性を保つ為にmysql2もprepare statement設定がデフォルトで有効になる。
breaking changeになるのでデフォルト値が実際に有効になるのは2世代先の7.2からで、時期バージョンの7.1ではmysqlを使用する場合に以下のDEPRECATION WARNINGが表示されるようになります。
ActiveSupport::DeprecationException:
DEPRECATION WARNING: The default value of `prepared_statements` for the mysql2 adapter will be changed from +false+ to +true+ in Rails 7.2.
#
DEPRECATION WARNINGを表示させない
DEPRECATION WARNINGの出力処理はprepared_statementsのprepared_statementsがdatabase.ymlで指定されていない場合にフレームワークでデフォルト値を参照する際に出力されています。
そのため、以下のようにdatabase.yml内で値を設定することでDEPRECATION WARNINGの出力を止めることが可能です。
これまでの振る舞い通りprepared_statementsを無効化したい場合
default:
adapter: mysql2
+ prepared_statements: false
rails7.2以降のデフォルトに合わせてprepared_statementsを有効化したい場合
※ rails7.2以降ではprepared_statementsのデフォルト値がtureに変更されるため値の指定は不要になります。
default:
adapter: mysql2
prepared_statements: true
プリペアドステートメントについて