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

Eijun Kitamura eijun @ hal.ne.jp
2006年 11月 26日 (日) 04:50:22 JST


塚田様:

北村です。
お世話になっております。

chores> > chores> 「OCI_Result($stmt, 'CALC_ITEM_NAME')」は、「リサイクル預託金」を返て
chores> > chores> いますか?
chores> > 何も返していません。
chores> 
chores> 「何も返していない」を絞り込むには var_dump 関数を使って、何が出力される
chores> かを確認すると良い気がします。
chores> 
chores> NULLなのか、空文字なのか などが分かれば、分かる人には分かるかも。

var_dump($calc_item_name);

[10]=>  string(0) ""

と返ってきました。
#該当レコードだけ示しています。

chores> SELECT 'リサイクル預託金' FROM DUAL;

OSqlEditで実行してみたところ、

「リサイクル預託金」と返ってきます。

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を入れたレコードを作って、同じことをやってみると

[0]=>  string(1) "a"

と返ってきます。

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

chores> UTF-8 を使う必要が無いとしたら、テーブル定義やサーバ(Orcle)・クライアン
chores> ト(PHP) 間の通信などを、EUC で一貫するというのは、できないでしょうか?
chores> 可能なのかは分かりませんが、サーバ・クライアント間の通信だけでも。
chores> (PostgreSQL では、可能でした。Access(JET)では、(私には)不可能でした。)

データベースのキャラクターセットは指定されているので変更できないですが、
データ型やPHPの設定は変更させてもらえそうな感じです。
サーバ・クライアント間の通信をEUCにするというのが、今の私の知識では理解できませんが、
ちょっと調べてみることにします。


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