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