• ベストアンサー

LIKEは類似一致検索なのでしょうか?

LIKEは類似一致検索なのでしょうか? "%Allegro%"で検索すると、「関係ない文字~アレグロ~関係ない文字」がヒットします。 といっても、MySQLがシソーラス辞典を持っているなんて思えませんし… 理由をご存じの方、ご教授ください。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>「allegro」という文字列を「アレグロ」と勝手に変換して検索してくれているのではないか? それはありません。 ワイルドカードで日本語検索をする場合、キャラクターセットが まちがっていると誤爆することはあります。 mysqlのバージョンや設定によって状況は異なります。 なお、前方後方一致はSQLとしての効率は悪いので推奨されていません。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • zionic
  • ベストアンサー率39% (31/79)
回答No.1

%がワイルドカードだからです。 "%Allegro%"の場合、対象のデータのどこかに"Allegro"が含まれていればヒットします。 なので「AAllegro」も「BAllegroC」も「AllegroD」も検索対象となります。 ちなみに、"Allegro%"であれば前方一致、"%Allegro"であれば後方一致の意味になります。

henguri22
質問者

補足

すみません。題意の説明に語弊があったようです。 「関係ない文字~アレグロ~関係ない文字」 という例は、実例にすると、 データが id name 1 この曲はアレグロの速さです。 とあるとき、 name LIKE "%allegro%" と検索して、上記のid:1のレコードがヒットするのです。 つまり、MySQL内で、「allegro」という文字列を「アレグロ」と勝手に変換して検索してくれているのではないか?というのが題意です。 すみません。説明不足で

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • mysqlのlike binaryでの前方一致

    mysql4.0.25でlike binaryを使って日本語検索をしていますが インデックスを使いたいので前方一致で条件を作ると検索されません。 文字コードはeuc-jpです。 部分一致でしか検索にひっかからないのですが 文字コードなど関係があるのでしょうか?

    • ベストアンサー
    • MySQL
  • 検索の完全一致は可能か?

    エクセル(ちなみに2000ですが)上での検索で、 部分一致ではなく、完全一致で検索することは可能ですか? たとえば「love」という文字だけを探したいのですが、「almost like being in love」などの該当する文字列すべてひっかかってしまうのです。 オプション機能にはありませんので、検索時なにか記号を入れるのだと思うのですが、可能ですか?

  • LIKEで検索

    MySQL 4.0.20 + PHP で名前が入ったテーブルよりLIKEを使って検索すると全然関係のない名前まで引っ張ってきます。 SELECT * FROM `lady` WHERE name LIKE 'らむ' 上記で検索すると 「とも」って名前まで引っ張ってきます。 SELECT * FROM `lady` WHERE name LIKE 'らな' だと 「るる」って名前も引っ張ります。 どうも「ら行」の検索がうまく出来ないようです。 何か回避方法はあるのでしょうか? よろしく御願いします

    • ベストアンサー
    • MySQL
  • 全文一致以外はヒットしない検索エンジン

    検索エンジンで例えば「日本国語大辞典」を検索すると、全文ぴったり一致したもの以外でも、「国語」とか「辞典」をバラバラ含んでいたりするものまで候補としてヒットしたりしますよね。 そうではなくて、ぴったり「日本国語大辞典」をそのまま含むもののみをヒットさせる方法、または検索エンジンがあれば教えてください。

  • SQLのLIKEでの_%あるなし

    こんにちは SQLのLIKEにおいて、LIKEだけだと、頭文字での一致を探すのみで、 _%でやると2文字目以降にも含まれれば検索されるということですか? 逆にいうと、LIKEのみでは頭文字の一致しか検索できないのですか?

    • ベストアンサー
    • MySQL
  • 完全一致の検索

    Sub test() D = UserForm1.Txet1.Text Cells.Find(What:=D).activate End sub UserForm1のテキストボックスに日付を入れ、 検索をかけようとしています 検索対象になるデータは、日付(4/1~3/31)です。 この検索で問題が・・・ 1/1を検索すると11/1が、2/1を検索すると12/1がそれぞれヒットしてくれるのです・・。 そりゃ・・完全に一致してますものね・・・ こういう場合、どうすればいいんでしょう? 考えてみたのは、len関数で文字列が何桁か取得し、 Ifを用いて検索対象範囲を設定しようと思ったのです が、普通はどのように書くのでしょうか? この考え方の他に書き方があったらご教授ください。 それと・・検索範囲ってどのように書いたらいいの でしょうか・・?

  • 部分一致検索ができなくて困っています。

    ※部分一致検索ができなくて困っています。 ※Apache2.0.52 + MySQL 5.0.51a + PHP5.2.8の環境です。 " sprintf "を使った、下記コードで部分一致検索をするには、どのようにしたらい いのか、どなたかご教授いただけないでしょうか。 -------------------------------------------------------------------------- $u_address = $_REQUEST['u_address'];// POSTで送られてきた値を受け取り変換。 検索fieldは、"u_address"です。 -------------------------------------------------------------------------- $query = sprintf("SELECT * FROM dive_free_tbl_ WHERE u_address = '%s' ORDER BY serial DESC", $u_address); ※上記のコードだと、"完全一致"にて検索となります。(部分一致の検索にしたい) 下記のコードに変更して、見たのですがエラーにでダメでした。(WHERE以下を抜粋) WHERE u_address = '%s' ORDER BY serial DESC", LIKE'%$u_address%'); WHERE u_address = '%s' ORDER BY serial DESC", LIKE'[%$u_address]%''); WHERE u_address = '%s' ORDER BY serial DESC", LIKE'{%$u_address}%''); WHERE u_address '%s' ORDER BY serial DESC", LIKE'%$u_address%'); WHERE u_address '%s' ORDER BY serial DESC", LIKE'[%$u_address]%''); WHERE u_address '%s' ORDER BY serial DESC", LIKE'{%$u_address}%''); " sprintf "を使わず、下記のコードでは問題なく部分一致検索ができます。 -------------------------------------------------------------------------- $sql = "SELECT * FROM dive_free_tbl_ WHERE u_address LIKE'%東%'"; -------------------------------------------------------------------------- 何方かご教授いただきたく、よろしくお願いします。 以上

    • ベストアンサー
    • MySQL
  • LIKEを用いたあいまい検索の方法

    SELECT `a2` FROM `a1` , `b1` WHERE a1.a2 LIKE b1.b2; を部分一致で検索したいのですが不可能なのでしょうか? SELECT `a2` FROM `a1` , `b1` WHERE a1.a2 LIKE '%b1.b2%'; とするとエラーは出ないのですが、検索結果が0になってしまうのです。 [開発環境] MySQL 4.0.x a1 b1 +--------+    +------+ | a2    |    | b2   | +-------+    +-------+ | abcde  |    | cd    | +-------+    +-------+ よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • PHPからのLIKE検索ができません。

    こんばんわ。お世話になります。 PHPからSQLを発行してLIKE検索をしようとしているのですがうまくいきません。(Xampp MySQL) $keyword = htmlspecialchars($_POST['keyword']); mysql_real_escape_string($keyword); $sql = "select * from master where name like '%{$keyword}%'"; テーブル内の name にマッチするはずの言葉があるのにマッチしません。 ちなみに echo $sql; とSQL文を表示させてPhpMyAdminでそれを実行すると、目的の検索結果が表示されます。 いろいろ検索してみたところ、LikeをLike Binary にする方法などがありましたが、どうにもうまくいきませんでした。文字コードはフォーム側、PHP・SQLともにUTF-8です。 '%{$keyword}%'あたりの書き方が悪いのでしょうか。 お手数おかけいたしますがアドバイスの程お願いいたします。

    • ベストアンサー
    • MySQL
  • LIKE検索で範囲指定の方法

    mysql 4.0で、文字列中に日付を埋め込んでいて、LIKE検索でこの日付の範囲指定で結果を取得したいのですが、このようなことは出来るのでしょうか。

    • ベストアンサー
    • MySQL