Unknown::Programmingスマートフォン用の表示で見るUnknown::Programmingこの広告は、90日以上更新していないブログに表示しています。DBICハマったメモ。今回も若干適当な記事だけども、メモということでお許し願いたい。誰も言及してないっぽいんだけどもしかしてこの現象うちだけ?とにかくタイトルの通りで、検証時の各モジュールのVERSIONは以下の通り。faultの件は無事解決したものの、今度はDB再接続時に文字化け発動でゲンナリしてました。UTF8がDB再接続時に動いてないことが判明。NAMES呼ばれるんだけどmod_perlだと何故か呼ばれない。ことでmod_perlに関係有りそうな部分をひたすら調べていたところ、mysql_auto_reconnectに行き着きました。}mod_perlな環境の場合、問答無用で真になるこのフラグ。コイツが真だと、DBの接続が死んでるにも関わらずDBIx::Class::Storage::DBI::connectedが何故か真を返す。因みにDB再接続の検証コードは以下のような感じでいける。<-なぜかconnectになる内部ではmysql_auto_reconnectが設定されているのでDBD::mysql的には再接続処理が行われるが、DBIC的には接続が繋がったままだと認識してるのでDBICにおける再接続処理、つまりon_connect_doなどが呼ばれない。UTF8が呼ばれない、呼ばれないので文字化け。いう流れでございます。んーmysql_auto_reconnectの挙動としては外側のインターフェイスに再接続を意識させないという意味では正しい動きなのかもしれないけど、でもそのせいでon_connect_doが動かないのもなんだか微妙な気がする・・・。NAMESする必要いないだろ的な身も蓋も無いことは言わないで下さい><色々事情がありまして、その環境ではデフォルトのキャラセットがEUC-JPなのです。まあ解決方法だけどんー。$dbh;}1;:追記終わり。utf8'でやりました。逆にmysql_auto_reconnectを使いたい場合の実装はどうなるだろう・・・。DBIのconnectedメソッドを呼んで接続確認するとかかな?ま、いいや。ここまで書いておいて実は全然違う原因とかだったら泣けるけど><とにかく一応コレでOKのはず。月別アーカイブはてなブログをはじめよう!fbisさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。