About Reference:アバウトリファレンス

当サイトはPHPなどのサーバーサイドスクリプトや、
MySQLなどのデータベースプログラミングのマニュアルサイトです。
WEBアプリケーションの開発やこれからWEBプログラミングを覚えたい!
というような方々のお手伝いが出来れば幸いです。

日本語 MySQL マニュアル

9.3.11. 照合順序を決定するのが難しい特殊なケース

大多数のクエリでは、MySQL がどの照合順序により比較演算を行うかは明確になっています。たとえば以下の場合、照合順序が ``カラム x のカラム照合順序'' になることは明らかです。

SELECT x FROM T ORDER BY x;
SELECT x FROM T WHERE x = x;
SELECT DISTINCT x FROM T;

ただし、複数のオペランドが使用されていると、あいまいになることがあります。たとえば、以下のような場合です。

SELECT x FROM T WHERE x = 'Y';

x の照合順序と文字列リテラル 'Y' の照合順序のどちらがこのクエリで使用されるのでしょうか。

標準 SQL では、``強制可能'' ルールと呼ばれていた方法で上記の問題を解決しました。これについては、以下の発想が基本となっています: x'Y' の両方に照合順序があるので、どちらの照合順序を優先するかを判断しなければならない。複雑な問題だが、これらのルールでほとんどの状況に対応できる。

  • 明示的な COLLATE 節は優先順位が 4。

  • 照合順序の異なる文字列 2 つの連結は優先順位が 3。

  • カラムの照合順序は優先順位が 2。

  • リテラルの照合順序は優先順位が 1。

これらのルールによって、あいまいさは次のように解消されます。

  • 優先順位が最も高い照合順序を使用する。

  • 双方の優先順位が一致する場合、照合順序が一致しないとエラーとなる。

例:

column1 = 'A'column1 の照合順序を使用する。
column1 = 'A' COLLATE x'A' の照合順序を使用する。
column1 COLLATE x = 'A' COLLATE yエラー

Converted by OpenCage. Base data is http://dev.mysql.com/doc/mysql/ja/.