かなめのロジック

フリーSEの雑記ブログ。ORACLEやPostgreSQL、情報セキュリティ、金融について主に書いています。

文字列の比較、CHAR型の空白埋め比較セマンティクスに注意

time 2016/03/28

文字列の比較、CHAR型の空白埋め比較セマンティクスに注意

ORACLEの文字列を格納するデータ型には、CHARとVARCHAR2があることを以前に紹介しましたが、この2つの型は比較時の動作が少し異なることをご存知でしょうか。

特にCHAR型の空白埋め比較セマンティクスには注意が必要です。
本記事ではそのあたりのことについて解説していきます。

sponsored link

文字型の比較方法

空白埋め比較セマンティクス

文字型の検索方法の1つ目は、空白埋め比較セマンティクスです。

空白埋め比較セマンティクスは、比較対象の文字長が少ない方の文字列の後ろに半角スペースを補ってから、比較を行う検索方法です。

比較する文字列の双方が、CHAR型・文字列リテラルの場合に採用される検索方法です。

非空白埋め比較セマンティクス

文字型の検索方法の2つ目は、非空白埋め比較セマンティクスです。

非空白埋め比較セマンティクスは、そのままの値で比較を行う検索方法です。

比較する文字列の片方または双方が、VARCHAR2型の場合に採用される検索方法です。

空白埋め比較セマンティクスの動作仕様に注意

通常、文字列の比較はそのままの値で比較を期待します(非空白埋め比較セマンティクス)。

そのため、後ろに半角スペースを補って文字列長を揃えてから比較する空白埋め比較セマンティクスには注意が必要です。

空白埋め比較セマンティクスでもインデックスは有効

CHAR型でインデックスが張ってある項目が、空白埋め比較セマンティクスで半角スペースが補われた場合、インデックスは効かなくなるのでは懸念しました。

結果としては、問題なくインデックスは有効でした。

まとめ

文字型の比較方法の違いについて見てきました。

空白埋め比較セマンティクスについては、通常期待する文字列の比較とは動作仕様が異なる点から注意が必要です。しかし、あまり知られていないのが現状です。

意図しない動作の原因となるので、ぜひ覚えておきましょう。

sponsored link

管理人

かなめ

フリーの業務系システムエンジニア。情報処理安全確保支援士。 ORACLEと金融と子育ての狭間で、元気に楽しくやってます。 [詳細]

管理人twitter

ブログ村



sponsored link