Rails script/runnerの文字化け
Railsで文字化けを解消するために以下のコードをapp/contorllers/application.rb に設置した。
すると今までうまく表示されているものが文字化けを起こし、以下のコードを設置したものはphpmyadminなどできちんと表示されている。
before_filter :set_charset before_filter :configure_charsets private def set_charset headers["Content-Type"] = "text/html; charset=UTF-8" end def configure_charsets response.headers["Content-Type"] = "text/html; charset=utf-8" # Set connection charset. MySQL 4.0 doesn't support this so it # will throw an error, MySQL 4.1 needs this suppress(ActiveRecord::StatementInvalid) do ActiveRecord::Base.connection.execute 'SET NAMES UTF8' end end
しかし、script/runnerでバッチ実行するコードは文字化けを起こすようになったので、script/runnerはやめて、ActionRecordを自力で呼び出して実行していた。
しかし、上の応用だがscript/runnerでも文字化けしない方法は最初に以下のコードを実行させればいいだけだった。
suppress(ActiveRecord::StatementInvalid) do ActiveRecord::Base.connection.execute 'SET NAMES UTF8' end
なんでMySQL 4.1, 5.0はこんなことをしないといけないの?