【CakePHP】SQLでcollate utf8_unicode_cを使う

  • 7
    Like
  • 0
    Comment
More than 1 year has passed since last update.

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%'
]);