[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 メーリングリストの案内