宣言
COERCIBILITY(str)
説明
文字列 str の多言語ソートにおける照合順序の優先順位を返します。
同一文字セットの2つの変数を比較する場合、照合順序がルールとなります。しかし、異なる文字セットの2つの変数を比較する場合は、異なる文字セット間の優先順位を定義する必要があります。例えば、次のステートメントのようになります:
obclient> SELECT c1 FROM t WHERE c1 = 'Y';
c1 と 'Y' が同じ照合順序を使用している場合、曖昧さは生じません。ただし、テーブル t で table_option に他の照合順序が指定されている場合、またはシステム変数 collation_connection が異なる照合順序を使用している場合、比較時に使用する照合順序は、2つの照合順序の優先順位によって決まります。
各種照合順序の優先順位は以下の表のとおりです。値が小さいほど優先順位が高くなります。
| 値 | 説明 | 例 |
|---|---|---|
| 0 | 明示的に指定された照合順序 | 明示的な COLLATE 句。 |
| 1 | 照合順序なし | 照合順序の異なる文字列の結合。 |
| 2 | 暗黙的に指定された照合順序 | 列値、システムパラメータ、または変数。 |
| 3 | システム定数 | システム関数、例えば USER() 関数の戻り値。 |
| 4 | ダウングレード可能な値 | 文字列。 |
| 5 | 数値型の値 | 数値または日付時刻値。 |
| 6 | 無視可能な値 | NULL または結果が NULL の式。 |
OceanBaseデータベースは、強制可能性(Coercibility)値と以下のルールを用いて曖昧さを解決します:
強制可能性が小さいほど、優先順位が高くなります。
比較する両者が同一の強制可能性を持つソートルールを持つ場合、以下の補足ルールを使用します:
2つの文字セットがどちらもUnicodeであるか、またはどちらもUnicodeでない場合、照合順序が異なるとエラーが返されます。
一方の文字セットがUnicodeを使用し、もう一方の文字セットがUnicodeを使用していない場合、Unicode側の方が優先順位が高くなります。例えば、次のステートメントではエラーは返されません:
obclient> SELECT CONCAT(t1.utf8_column, t2.gbk_column) FROM t1,t2;同一文字セット内で、照合順序がそれぞれ
_binとa_ciまたは_csの場合、_binの照合順序が使用されます。
例
obclient> SELECT COERCIBILITY('oceanbase' COLLATE utf8mb4_bin);
+-----------------------------------------------+
| COERCIBILITY('oceanbase' COLLATE utf8mb4_bin) |
+-----------------------------------------------+
| 0 |
+-----------------------------------------------+
1 row in set
obclient> SELECT COERCIBILITY('oceanbase');
+---------------------------+
| COERCIBILITY('oceanbase') |
+---------------------------+
| 4 |
+---------------------------+
1 row in set
obclient> SELECT COERCIBILITY(user());
+----------------------+
| COERCIBILITY(user()) |
+----------------------+
| 3 |
+----------------------+
1 row in set
obclient> SELECT COERCIBILITY(1000);
+--------------------+
| COERCIBILITY(1000) |
+--------------------+
| 5 |
+--------------------+
1 row in set