[Seasar-user:8888] Re: [S2Dao]Query の書き方について

Jundo Ishikawa [E-MAIL ADDRESS DELETED]
2007年 7月 2日 (月) 19:55:04 JST


JUNDUです。

 すっごく蛇足ですが。

07/07/02 に [E-MAIL ADDRESS DELETED]<[E-MAIL ADDRESS DELETED]> さんは書きました:
> >charではデータの末尾がスペース埋めされるためだと思います。
> >
> >  ex: char(6)では AAA = 'aaaa' ではなく、AAA = 'aaaa  '
> >
> >SQLを直接発行した場合にヒットするのは、DB側での型変換が効い
> >ているためかと。
>
> eclipseにてデバッグしている時に表示されるSQLをコピペすると
> ヒットするので、データベース側で何らかの処理がされているのでしょうね。
> ちなみにデータベースはOracleです。

 Oracleの場合、比較対象の両方がCHAR型、NCHAR型、テキスト・リテラルの
場合に、長いほうに合わせて後ろに空白を埋めてから比較が行われます。

 ログをSQL*Plusなどに貼り付けた場合はログに書かれている通りテキスト・
リテラルなので、後ろについた空白を無視して比較することが出来ますが、
バインド変数の場合、VARCHARとしてバインドされるのか、空白が厳密に比較
されます。

 埋め込みコメント形式ならばリテラル扱いとなるので比較に成功するよう
になりますが、SQLインジェクションの問題がありますし、値をクォートで
くくる必要もあるため、お勧め出来ません。

 というわけで、データベースの型がCHAR型の場合、比較では正しくバイン
ドする値の後ろに空白を埋めるか、データベースの型を変換するようにして
ください。よろしくお願いします。


-- 
 Jundo Ishikawa <[E-MAIL ADDRESS DELETED]>
         ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄



Seasar-user メーリングリストの案内