オペレーターの行動
等しい演算子=
等号演算子=を使用して正確な検索を行っている場合、ソリューション@rsanchezは正しいです。たとえば、次の正確な値またはその翻字された値を使用して、等しい行œを見つけることができます。œoe
SELECT 'œ' = 'oe' COLLATE utf8_unicode_ci ;
-- true
+-------------------------------------+
| 'œ' = 'oe' COLLATE utf8_unicode_ci |
+-------------------------------------+
| 1 |
+-------------------------------------+
等しい行、œまたはoeユーザーがそれらのいずれかを使用する場合に行を返します。
LIKEオペレーター
LIKEただし、 operatorを使用してあいまい検索を行いたい場合、これは機能しません。たとえば、入力して を含む単語を検索しても、 を含むœ行はoe返されませんœ。
SELECT 'œ' LIKE 'oe' COLLATE utf8_unicode_ci ;
-- false
+----------------------------------------+
| 'œ' LIKE 'oe' COLLATE utf8_unicode_ci |
+----------------------------------------+
| 0 |
+----------------------------------------+
説明 ?
これはバグではありませんが、SQL 標準 (Alexander Barkov の回答を参照) によって予想される動作であり、より複雑なアプローチを使用しLIKEながら文字ベースで比較を行います (例: 音訳の同等性を許可する)。=
ソリューション
音訳されたフォームを提供する
解決策は、検索の音訳を生成し、クエリを変更して各フォームを検索することです。
SELECT * FROM `mytable`
WHERE `myfield` LIKE 'oe' or `myfield` LIKE 'oe'
COLLATE utf8_unicode_ci;
全文検索を使用する
MySQL 5.6以降、全文検索がInnoDB で利用できるようになりました (以前はMyISAMテーブルでのみ利用可能でした)。