データベース
MySQLの異なる照合順序の結合について
ヤス
更新日:2021/08/05
結合の条件に使う項目の照合順序はできるだけ合わせた方が良さそうです。
MySQLで異なる照合順序の結合を行うとエラーになる場合がある
MySQLのテーブルを結合する時に、結合条件に使用している項目の照合順序が異なる場合、エラーが発生する場合があります。
エラー例
(A.code照合順序:utf8_general_ci、B.code照合順序:utf8_unicode_ci)
1 2 3 4 |
SELECT * FROM A LEFT JOIN B ON A.code = B.code |
Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation ‘=’
対応策
結合の際にCOLLATEを使用して、照合順序をどちらかに統一することで結合できるようになります。
1 2 3 4 |
SELECT * FROM A LEFT JOIN B ON A.code = B.code COLLATE utf8_general_ci |
上記の対応で結合できるようになりますが、値を変換して結合しているため、インデックスが使用されなくなります。
レコード数が大量になる場合は、照合順序を合わせておいた方が良いです。