プログラミング

[MySQL]Illegal mix of collationsエラーが出たときの対処法

プログラミング
この記事は約3分で読めます。
スポンサーリンク

MySQLを使用して開発をしていたときに「Illegal mix of collations」というエラーが出ることがあったので、その時のエラーの解消方法をメモしておきます。

スポンサーリンク

前提条件

  • MySQL:5.6

Illegal mix of collationsとは

異なるCHARSET同士を比較しようとするとこのエラーが発生します。

下記のテーブルを作成し、

 mysql> show fields from sample;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(20) | YES  |     | NULL    |                |
| name2 | varchar(20) | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)

nameの照合順序に「utf8_general_ci」、name2の照合順序に「utf8_unicode_ci」を設定しています。

この状態で下記のクエリを実行すると、

mysql> SELECT * FROM sample WHERE name = name2;
ERROR 1267 (HY000): Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation '='

Illegal mix of collationsエラーとなります。

解決方法

WHERE句のところでCOLLATEを使用してCHARSETを指定することでエラーを回避できます。

mysql> SELECT * FROM sample WHERE name = name2 COLLATE utf8_general_ci;
Empty set (0.00 sec)

データが入っていないので、結果は0件になりますが、エラーは出ないようになりました。

最後に

CHARSETが異なるフィールドの比較をすることはあまりないかもしれませんが、今回の回避方法を知っていればエラーが発生しても慌てずに対処できそうですね。

スポンサーリンク
スポンサーリンク
KoEをフォローする
CodeLab

コメント

タイトルとURLをコピーしました