[PHP-users 30800] Re: DBから取り出した特定の文字列が表示されない

chores @ jp1.cx chores @ jp1.cx
2006年 11月 26日 (日) 10:06:41 JST


塚田です。

> var_dump($calc_item_name);
> 
> [10]=>  string(0) ""
> と返ってきました。

とりあえず、mb_convert_encoding の問題でなく、OCI_Result 寄りの問題だと
言い切ることはできそうですね。(それ以上は私には…)

「OCI_Result 以外の Oracle 8 関数」でも空文字ですかね?
oci_fetch_all() など

そうなら、Oracle クライアントライブラリの問題かもしれないので、別のバー
ジョンに置換すると状況が変わるかも。

それと、「Oracle 8 関数 以外」を使うというのは、マズイですかね? (という
か、たとえ本件は解決できたとしても、別のリスクが高まるかも。)
PDO関数 とか

私の場合は、PDO関数の不具合にはまってしまって、やむ終えず「COM と .Net」
に書き直しを迫られているコードがあります。(その件は、近々このMLにも書こ
うと思っていますが。)


> chores> SELECT 'リサイクル預託金' FROM DUAL;
> 
> OSqlEditで実行してみたところ、
> 
> 「リサイクル預託金」と返ってきます。

これを、PHP の Oracle 8 関数 (OCI_Result など) で取得すると、
空文字( string(0) ) になりますかね?


> chores> また、「リサイクル預託金」を含む列に文字を結合するとどうなりますか?
> chores> (SELECT 句を以下のような感じで)
> chores> 
> chores> SELECT 'a' || CALC_ITEM_NAME AS CALC_ITEM_NAME
> chores> 
> chores> 仮に、上記のようなSQLで「aリサイクル預託金」と取得できるなら、PHP側で先
> chores> 頭の文字列「a」を外す処理をするとかは(業務上?)許されませんかね?
> 
> var_dump()してみると、リサイクル預託金のレコードは
> 
> [10]=>  string(0) ""
> 
> と返ってきます。

となると、「リサイクル預託金」という文字列で不具合が発生するのではなく、
「リサイクル預託金」を含む文字列で不具合が発生するらしいですね。


> これは、どう解釈すればよいのでしょう。
> NULL値の方は正しく返ってきているということでしょうが、リサイクル預託金の方が
> 何なのか・・・。

何なのか…

参りました。という、感じです。


> サーバ・クライアント間の通信をEUCにするというのが、今の私の知識では理解できませんが、
> ちょっと調べてみることにします。

PostgreSQL ですと、pg_set_client_encoding() 関数で、DBの内部エンコードに
関わらずサーバ・クライアント間の通信エンコードを設定できます。

参考: http://phpspot.net/php/man/php/function.pg-set-client-encoding.html

タイムリーな話題で、[PHP-users 30797] によると、NLS_LANG あたりがヒント
になりそうな予感。

-- 
 <chores @ jp1.cx>



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