[PHP-users 23237]SJISのOracleから半角カナデータを取得するとfalseに変わる

永野 泰之 y_nagano @ nagoya2.jrc.or.jp
2004年 9月 7日 (火) 16:34:23 JST


永野です

  クライアントのPHPからサーバで稼動しているOracleのデータをSELECTした際に、
正しいデータが返らないケースがあります。

使用環境:
  クライアント
   Solaris8
   Apache/1.3.31 (Unix)
   PHP/4.3.8
   Oracle9.0.1

  サーバ
   WindowsNT
   Oracle8.1.7(SJIS)

エラー内容:
  固定長フィールドに格納された半角カナデータの場合に発生するようで、本来のデー
タでは無く空のデータが返ります。漢字やアルファベットが文字化けしているといっ
たことはありません。試しに返されたデータをvar_dump()してみるとbool(false)が
格納されていました。

エラーの発生条件・再現性:
  クライアントのNLS_LANGがJAPANESE_JAPAN.JA16EUCの状態で発生するようです。SJ
ISでは発生しませんでした。SQLPLUSではどちらのケースも正しいデータが帰ってい
るためPHPに原因があると考えています。

  同様のケースを過去ログから探したところ、「[PHP-users 3042] 半角カナについ
て」が類似ですが未解決のようでした。
  OTNでも同様の件について話題があり、

  RE[1]:これが原因かも?
http://otn.oracle.co.jp/cgi-bin/non/msgview_r.cgi?communityid=otn-428819&bbsid=1&no=6952&view=9

  --引用
  Client 側の NLS_LANG が EUC の場合、10 バイトの
  箱に 20 バイトのデータを入れようとしていることに
  なるので、そういう事態は PHP 側で想定外ということ
  になり、データがなくなったり、core dump したりする
  のではないかというのが、結論です。
  --

  と原因考察がありましたが根本解決には至っていないようでした。
  同様の現象に遭遇された方おられませんでしょうか?



PHP-users メーリングリストの案内