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