MySQLの異なる照合順序の結合について


2016年7月20日

結合の条件に使う項目の照合順序はできるだけ合わせた方が良さそうです。

MySQLで異なる照合順序の結合を行うとエラーになる場合がある

MySQLのテーブルを結合する時に、結合条件に使用している項目の照合順序が異なる場合、エラーが発生する場合があります。

エラー例

(A.code照合順序:utf8_general_ci、B.code照合順序:utf8_unicode_ci)
Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation ‘=’

対応策

結合の際にCOLLATEを使用して、照合順序をどちらかに統一することで結合できるようになります。 上記の対応で結合できるようになりますが、値を変換して結合しているため、インデックスが使用されなくなります。
レコード数が大量になる場合は、照合順序を合わせておいた方が良いです。