2011-12-27 16 views
17

検索クエリのアクセントを非表示にする方法はありますか?アクセントを区別しないMySQLの検索クエリ

カラムとテーブルの照合順序はutf8_polish_ciなので、変更したくありません。

例ワード:トルン

select * from pages where title like '%torun%' 

それは "トルン" を見つけられません。どうやってやるの?

+1

http://stackoverflow.com/questions/2302813/normalizing-accented-characters-in-mysql-queries – Sun

+0

@SunWKim私は前にそれを試みたが、私のために働かなかった。 – ocanal

+0

@ocanal私たちと共有できる解決策を見つけましたか? – zvzej

答えて

17

...where title like '%torun%' collate utf8_general_ci 

しかし、実行時にその場での照合を変更すると、インデックスを使用してMySQLの可能性をforgoesことを注意してくださいので、大きなテーブルでのパフォーマンスがかもしれひどい。

また、列を別の列にコピーすることもできます(例:searchable_title)。ただし、照合順序を変更することができます。実際には、データをコピーしますが、特定のワークロード/目的に合わせて最適化されたやや異なった形式のものがあります。トリガーを使用すると、重複した列を同期させることができます。この方法は、索引付けされているとうまくいく可能性があります。

注 - データベースに実際にhtmlエンティティではなくそれらの文字が含まれていることを確認してください。 また、接続の文字セットも重要です。上記は、リテラル値

...where title like _utf8'%torun%' collate utf8_general_ci 

そしてもちろんのためintroducerを必要としない場合は、それがset names utf8

ようset namesを経由して、例えば、UTF8に設定されますと仮定し、単一引用符で囲まれた値は、実際にする必要がありutf8は、SQLクエリの残りの部分ではない場合でもエンコードされます。

+1

Ł(Łódźのようなアクセント付きのポーランド語のL)でうまくいかない理由はありますか? '...ここのような都市_utf8 '%lodz%'は照合するutf8_general_ci' – suz

4

これは極端な状況では機能しませんが、列の照合順序をUFT8 utf8_unicode_ciに変更してみてください。次に、アクセント付きの文字はアクセントのないアクセントの文字に等しくなります。あなたは、SQLクエリの実行時に照合順序を変更することができます

関連する問題