文字データは文字値の大きさに基づいて比較されます。これには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つまたは2つの値のデータ型がVARCHAR2またはNVARCHAR2の場合、OceanBaseデータベースは非埋め込み比較のセマンティクスを使用します。
異なる比較セマンティクスを使用して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' |
通常、空白埋め込みと埋め込みなしの比較結果は同じです。最後の行の比較例は、空白埋め込みと埋め込みなしの比較の意味論的な違いを示しています。