DBD::Oracle(1.19)はNLS_LANGを取得する際、Windows環境ではレジストリを優先的に見に行くようです。
初期状態でレジストリに設定されているNLS_LANGは恐らくJapanese_Japan.JA16SJISだと思います。
レジストリをいじってしまえばできるんだけども、他のマシンで動かす時とか面倒になってしまうのであまりいじりたくない。
でも環境変数に設定しようとして
export NLS_LANG="Japanese_Japan.UTF8"
としても
$ENV{NLS_LANG} = 'Japanese_Japan.UTF8';
としても効果無し。
しょうがないんでDBD-Oracleのソースを読んでみたら発見。
DBD::Oracle::ora_cygwin_set_env( NLS_LANG => 'Japanese_Japan.UTF8' );
でできた。
CatalystではMyApp.pmに
BEGIN { use DBD::Oracle; $ENV{NLS_LANG} = 'Japanese_Japan.UTF8'; if ($^O eq 'cygwin') { DBD::Oracle::ora_cygwin_set_env( NLS_LANG => $ENV{NLS_LANG} ); } }
ってな感じで。
参考:[svn:dbd-oracle] r2436 - in dbd-oracle/trunk: . t - nntp.perl.org