[PHP-users 3267] Re: 半角カナについて
ishiguro
php-users@php.gr.jp
Fri, 02 Nov 2001 18:08:27 +0900
いしぐろです。
ちょっと、間があいてしまいましたが、まだ解決しておりません。
レスポンス悪くてすみません。
>半角文字=1バイト が成り立つかどうかは、文字コードに寄ります。
>#例えば、EUC-JPでは、半角カナは2バイトになります。
>
>また、そのVerchar2が、「文字数」単位か「バイト数」単位か、
>きちんと把握していないと、落し穴にはまるかも知れません。
>#文字数の場合、DB側が文字コードを把握していないと…。
>
>「表示されません」というのは、「全く」でしょうか。
>「5文字目以降の部分が」でしょうか。
>(文字化けするという分けではないですよね?)
>
>その辺りにも、注意が要るかも知れません。
OracleでVerchar2(35) Byteです。
で、定義されている項目があります。
そこに「1234567890アイウエオアイウエオ123456」というデータが入っていると表示されますが、
一文字たして「1234567890アイウエオアイウエオ1234567」にすると何にも表示されなくなります。
半角カナは2バイト、半角数字は1バイトとして計算して、Oracleの項目のサイズを
オーバーした場合、このような現象になるようです。
(上記の場合、何故か36バイト分までは表示されますが、サイズが奇数の為と思われます。)
ソースは以下のようになります。
$cur=OCILogon("Acc","Pass","Setsuzoku");
$stmt=OCIParse($cur,"SELECT * FROM Table");
OCIexecute($stmt,OCI_DEFAULT);
OCIFetch($stmt);
$FieldNum = OCINumCols($stmt);
echo ("<TABLE>");
While(OCIFetch($stmt))
{
echo ("<TR>");
For($col = 1;$col<=$FieldNum;$col++)
{
echo ("<td align=center nowrap>");
echo(OCIcolumnisnull($stmt,$col). "<BR>");
echo(OCIstatementtype($stmt). "<BR>");
echo(OCIcolumnname($stmt,$col). "<BR>");
echo(OCIcolumntype($stmt,$col). "<BR>");
echo(OCIcolumnsize($stmt,$col). "<BR>");
echo(OCIerror($stmt). "<BR>");
echo(strlen(OCIResult($stmt,$col)) . "<BR>");
if(OCIResult($stmt,$col) <> "")
{
echo ("<font size=3>" . trim(OCIResult($stmt,$col)));
}
else
{
ここに入ると表示されない echo ("<font size=3> ");
}
echo ("</font></td>");
}
echo ("</TR>");
}
echo ("</TABLE>");
・
・
結果として、後述例の場合は、OCIResult($stmt,$col)に文字列長0の文字列「""」が戻ってきます。
NULLではないようです。レングスも0でした。項目名その他はきちんと戻ってきます。
OracleのサーバとApacheのサーバは別なのですが、Apacheのサーバ上のSQLPlusから同じ
SQLを投げてみるとどちらのデータでも正しい結果が返ってきますので、PHPの設定か、
プログラムの問題と考えています。
すっかり、いきずまっております。何かお解りになりましたら、ご教授願います。