文字データは文字値の大きさに基づいて比較されます。これには、バイナリ比較と言語比較、およびスペースパディングまたはノーパディング比較セマンティクスという2つの測定方法が含まれます。このセクションでは、文字データの2つの測定方法に基づく比較ルールについて説明します。
バイナリ比較と言語比較
バイナリ比較
デフォルトのバイナリ比較では、OceanBaseデータベースはデータベースの文字セット内の文字の数値コードのカスケード値に基づいて文字列を比較します。ある文字の値が別の文字の値よりも大きい場合、その文字の方が大きいと見なされます。OceanBaseデータベースはASCII文字セットとEBCDIC文字セットをサポートしていません。
言語比較
言語ソートでは、SQLソートと比較はすべてNLS_SORTで指定された言語ルールに従います。文字エンコードのバイナリシーケンスが文字セットで要求される言語シーケンスとマッチしない場合、言語比較が使用されます。NLS_SORTパラメータの設定がBINARYではなく、かつNLS_COMPパラメータがLINGUISTICに設定されている場合、言語比較が使用されます。
スペースパディングとノーパディング比較セマンティクス
スペースパディング比較セマンティクス
スペースパディングセマンティクスを使用する場合、2つの値の長さが異なる場合、OceanBaseデータベースは最初に短い値の末尾にスペースを追加して長さを等しくします。次に、OceanBaseデータベースは2つの値を1文字ずつ比較し、最初の異なる文字が現れるまで続けます。最初の異なる文字の位置でより大きな文字を持つ値の方が大きいと見なされます。2つの値に異なる文字がない場合、それらは等しいと見なされます。このルールは、2つの値が末尾のスペースだけが異なる場合に等しいことを意味します。
注意
OceanBaseデータベースは、比較する2つの値がどちらもデータ型CHAR、NCHAR、テキストリテラル、またはUSER関数が返す値の場合にのみ、スペースパディングの比較セマンティクスを使用します。
ノーパディング比較セマンティクス
ノーパディングセマンティクスを使用する場合、OceanBaseデータベースは2つの値を1文字ずつ比較し、最初の異なる文字が現れるまで続けます。その位置でより大きな文字を持つ値の方が大きいと見なされます。2つの異なる長さの値が短い値の比較が完了するまで同じである場合、長い値の方が大きいと見なされます。長さが等しい2つの値に異なる文字がない場合、これらの値は等しいと見なされます。
注意
比較する値のうち1つまたは両方のデータ型がVARCHAR2または
異なる比較セマンティクスを使用して2つの文字列値を比較した結果は異なる場合があります。以下の表の例は、スペースパディングセマンティクスとノーパディングセマンティクスを使用した比較結果を示しています。
| スペース補完 | 未補完 |
|---|---|
| 'ac' > 'ab' | 'ac' > 'ab' |
| 'ab' > 'a ' | 'ab' > 'a ' |
| 'ab' > 'a' | 'ab' > 'a' |
| 'ab' = 'ab' | 'ab' = 'ab' |
| 'ac' > 'ab' | 'ac' > 'ab' |
| 'a ' = 'a' | 'a ' > 'a' |
通常、スペースパディングとノーパディングの比較結果は同じです。最後の行の比較例は、スペースパディングとノーパディング比較セマンティクスの違いを示しています。