MySQLで照合順序がutf8_general_ciのカラムに対して、utf8_unicode_ci のあいまい検索を行う場合は以下のようにする。
select * from member where namae collate utf8_unicode_ci like '%hoge%';
Cakeで上記を実行した場合そのままではうまくいかなかったためメモ。
以下だとCakeで発行されるSQLのname collate utf8_unicode_ci
にバッククオートがつくためエラーとなる。
失敗例
$this->find('all',[
'conditions'=>['name collate utf8_unicode_ci like'=>'%hoge%'
]);
正しくはこれ。
カッコでくくるか、バッククオートをつけることでカラムにのみバッククオートがつくようになる。
成功例
$this->find('all',[
'conditions'=>['(name) collate utf8_unicode_ci like'=>'%hoge%'
]);
成功例
$this->find('all',[
'conditions'=>['`name` collate utf8_unicode_ci like'=>'%hoge%'
]);