【MySQL】 Illegal mix of collations (utf8_general_ci,COERCIBLE) and (latin1_swedish_ci,NUMERIC) for operation ‘like’


【MySQL】 Illegal mix of collations (utf8_general_ci,COERCIBLE) and (latin1_swedish_ci,NUMERIC) for operation ‘like’mysql5.0の環境で動いていたものをmysql5.5の環境に移行したら以下のような
エラーが発生した。。

General error: 1267 Illegal mix of collations (utf8_general_ci,COERCIBLE) and (latin1_swedish_ci,NUMERIC) for operation ‘like’

このエラーは(utf8_general_ci,COERCIBLE)がサーバ側のコード
(latin1_swedish_ci,NUMERIC)がクライアント側のコード
ということらしい。
文字コードが違うからlikeで調べられないよっていうことっぽい?

よくわからないので参考URLなどをもとに調査。

クライアント側の文字コードをプログラムで調べるとASCIIになっていたので、
UTF-8に変換するのか?とか思ってやってみるもASCIIで取り扱われる。。

そもそもutf8_general_ciとなっているサーバ側のカラムはDATE型。
DATE型にUTF-8とかあるのかよくわからない。
型の問題なのかと思ってとりあえずカラムを文字列型に変更。

ALTER TABLE `テーブル` CHANGE COLUMN `対象カラム` `対象カラム` VARCHAR(10) NOT NULL  ;

カラム側を文字列に変換したらエラーが無くなった。

でもカラムの意味としてはDATEが正しいのでカラム型を変換するのは気持ち悪い・・・。
さらに調査。。その後以下のページを発見。

Illegal Mix Of Collations While Comparing Datetime with String

selectするときにデータベース側の列をDATE_FORMATで変換してあげればいいということらしい。

とりあえず動いた!

「llegal mix of collations」のエラーは色々な原因が
考えられるややこしい問題なんだということがわかった。

■参考URL

mysql の utf8_general_ci と utf8_unicode_ci の混在でエラー

Illegal mix of collations:ほんとに漢字コードの問題はややこしい ・・・ 【MySQL】

migrateでInnoDBの文字コードをutf8に

ω・)。○(思いつき広場 Illegal mix of collations

MYSQLへの接続を永久UTF8化:Illegal mix of collations

concrete5の検索ブロックで mysql error: Illegal mix of collations for operation ‘like’

Illegal Mix Of Collations While Comparing Datetime with String

MySQL DATE_FORMAT(date,format)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です