ホームページ >php教程 >php手册 >MySQL の中国語あいまい検索問題の解決策

MySQL の中国語あいまい検索問題の解決策

WBOY
WBOYオリジナル
2016-06-21 09:09:17855ブラウズ

mysql|解決策|問題|中国語

MySQL における中国語のあいまい検索の問題の解決策
出典: Lin Xinglu

MySQL で中国語のあいまい検索を実行すると、たとえば「-0x1.ebea4bfbffaacp-4%」を検索すると、無関係なレコードが返されることがよくあります。中国語の文字が返される可能性がありますが、文字は存在しません。
以前にも同様の問題に遭遇したことがありますが、MySQL マニュアルを詳しく読んだところ、非常に便利に解決して満足のいく結果を得る方法があることがわかりました。

例:
· 「タイトル」でニュース データベースを検索したいと考えています。
次の SQL ステートメントのように、キーワードには中国語と英語が含まれる場合があります:
select id,title,name from achech_com.news where title like '- 0x1.ebea4bfbebe84p -4%'
返された結果では、一部のタイトル フィールドには確実に「a」キーワードが含まれていますが、一部は中国語のみですが、
検索結果にも返されます。
解決策は、次のような BINARY 属性を使用して検索します。
select id,title,name from achech_com.news where binary title like '-0x1.ebea4bfbebe84p-4%'
返された結果は以前より正確になっていますが、英語の文字は大文字と小文字が区別されるため、「Achech」
と「achech」の検索結果が異なる場合があります。
BINARY 属性を使用すると前の問題を解決できることがわかったので、MySQL でサポートされている
UCASE 関数と CONCAT 関数を見てみましょう。UCASE はすべての英語を大文字に変換し、CONCAT 関数は文字を接続するために使用されます。 SQL ステートメントを完全に解決したものです:
select id,title,name from achech_com.news where binary ucase(title) like concat('%',ucase('a'),'%')
取得ステップは最初に属性を変更します。結果を正確に取得するには BINARY に指定します。いいねされたタイトル
の内容には大文字と小文字が含まれる可能性があるため、最初に ucase 関数を使用してすべてのフィールドの内容を大文字に変換してから、 like 操作、like 操作はファジーメソッドを使用します。concat を使用する利点は、渡されるキーワードを直接キーワードにできることです。「%」ワイルドカードを使用する必要がなく、「'a'」を直接変数に置き換えるだけです
。どの言語でもすべてが機能します。
もちろん、次のように書くこともできます:
select id,title,name from achech_com.news where binary ucase(title) like ucase('0x0.00020bfbebe08p-1022%')
検索結果は非常に満足のいくものですが、速度がしたがって、N ミリ秒遅くなる可能性があります。

関連情報:
関連:
20.16 検索における大文字と小文字の区別
デフォルトでは、MySQL 検索では大文字と小文字が区別されません (ただし、チェコ語など、大文字と小文字が区別されない文字セットもあります)。これは、col_name で検索する場合を意味します。 「a%」のように、A または a で始まるすべての列の値を取得します。この検索で​​大文字と小文字を区別する場合は、INDEX(col_name, "A")=0 などを使用して接頭辞を確認します。または、列の値が正確に「A」でなければならない場合は、STRCMP(col_name, "A") = 0 を使用します。




声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。