MySQL の「照合順序の不正な組み合わせ」エラーのトラブルシューティング 質問する

MySQL の「照合順序の不正な組み合わせ」エラーのトラブルシューティング 質問する

MySQL のストアド プロシージャを通じて選択を実行しようとすると、以下のエラーが発生します。

演算 '=' の照合順序 (latin1_general_cs,IMPLICIT) と (latin1_general_ci,IMPLICIT) の不正な組み合わせです

ここで何が間違っているのか、何か考えはありますか?

テーブルの照合順序は でありlatin1_general_ci、where 句の列の照合順序は ですlatin1_general_cs

ベストアンサー1

これは通常、互換性のない照合順序の 2 つの文字列を比較するか、または結合された列に異なる照合順序のデータを選択しようとすることによって発生します。

この句を使用するCOLLATEと、クエリで使用する照合を指定できます。

たとえば、次のWHERE句では、投稿したエラーが常に発生します。

WHERE 'A' COLLATE latin1_general_ci = 'A' COLLATE latin1_general_cs

解決策としては、クエリ内の 2 つの列に共有照合を指定します。このCOLLATE句を使用する例を次に示します。

SELECT * FROM table ORDER BY key COLLATE latin1_general_ci;

別のオプションとして、次のBINARY演算子を使用します。

BINARY str は CAST(str AS BINARY) の省略形です。

解決策は次のようになります。

SELECT * FROM table WHERE BINARY a = BINARY b;

または、

SELECT * FROM table ORDER BY BINARY a;

コメントで Jacob Stamm が指摘しているように、「列をキャストして比較すると、その列のインデックスはすべて無視される」ことに注意してください。

この照合ビジネスについてさらに詳しく知りたい方は、eggyalの同じ質問に対する素晴らしい回答

おすすめ記事