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

chores @ jp1.cx chores @ jp1.cx
2006年 11月 25日 (土) 12:24:19 JST


塚田です。

> 私自身オラクルのことはあまり詳しくないんですが、データベースの中に、
> 2つの文字コードは混在していないはずです。
> データベースはUTF-8のはずです。

この件につきましては、杉村様が言及されていらっしゃいますが、「データベー
スはUTF-8のはず」ということですので、テーブル定義では NCHAR/NVARCHAR2 を
使っていると仮定しています。

そして…

> スクリプトはEUC-JPなので、mb_convert_encodingを使ってます。
> 引数はautoにしてもUTF-8にしても、変化はありません。

ということですので、サーバ(Orcle)・クライアント(PHP) 間も UTF-8 で通信し
ているようですね。

とすれば、auto ではなく UTF-8 に固定したほうが良い気がします。文字列によっ
ては誤認識することもあるでしょうから。

しかし、本件ではこれは原因ではないようですので、ひとまず置いておいて。


> chores> 「OCI_Result($stmt, 'CALC_ITEM_NAME')」は、「リサイクル預託金」を返て
> chores> いますか?
> 何も返していません。

「何も返していない」を絞り込むには var_dump 関数を使って、何が出力される
かを確認すると良い気がします。

NULLなのか、空文字なのか などが分かれば、分かる人には分かるかも。


ちなみに、以下のようなSQLを実行・取得するとどうなりますかね。

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

もしかしたら、「'リサイクル預託金'」だと JA16EUC になってしまうかもしれ
ませんので、UTF-8 で返すように変更する必要があるかも。MS-SQL では、前に
「n」をつけて「n'リサイクル預託金'」みたいにしたような記憶が(うろ覚え)。


また、「リサイクル預託金」を含む列に文字を結合するとどうなりますか?
(SELECT 句を以下のような感じで)

SELECT 'a' || CALC_ITEM_NAME AS CALC_ITEM_NAME

仮に、上記のようなSQLで「aリサイクル預託金」と取得できるなら、PHP側で先
頭の文字列「a」を外す処理をするとかは(業務上?)許されませんかね?


思いつくままに、次々と書き足してしまい申し訳ございません。
あと、もうひとつ。

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

-- 
 <chores @ jp1.cx>



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