オペレーターの行動
等しい演算子=
等号演算子=
を使用して正確な検索を行っている場合、ソリューション@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
テーブルでのみ利用可能でした)。