• 締切済み

LIKE %検索単語%

perlのDBIを用いてMYSQLのLIKE %検索単語%を使って掲示板の記事の全文検索を作りました。日本語の検索に関しては意図した記事を拾ってきてくれるのですが、英字の検索単語に関して、その英字だけを含んだ以外の記事も余計に拾ってきてきます。 現在の症状 【僕らは】 【意味】 【宝山】 といった単語が入った記事が検索単語をLIKE %a% として検索をかけると 【a】の検索結果として返ってきます。上記の記事内にはもちろん【a】という単語は含まれていません。 【僕らは】【意味】【宝山】といった単語はあくまでもこういった単語が検索結果として返ってきたというだけで参考までに用意した単語です。他にもあると思われます。原因がまったくわからないので、なぜこういった単語が【a】と検索をかけて引っかかってくるか全くわかりません。 掲示板の記事は以下にいれています テーブル名 post カラム名 log select * from post where log like '%a%'; 使用中の環境(PERL,MYSQLなど)の文字コードはすべてutf8で統一。 文字コードも統一しているし、日本語では意図したとおり動いてくれるので原因がまったくわかりません。お知恵をお貸しください。

みんなの回答

  • cjyj807
  • ベストアンサー率100% (2/2)
回答No.3

>select * from post where log like '%a%'; このSQL文がソースの中に書いてある SQL文ですか?

takahathi
質問者

補足

はいそうです。logに記事が入っています。 postがテーブル名 logがカラム名です。 PERLのDBIを使って呼び出していますが、直にMYSQLのコマンドで select * from post where log like '%a%'; と打っても同じ現象が現れるので、PERL、DBIは考慮して頂かなくともよいです。 追記、MYSQLはutf8ですが、記事の文字コードはutf-8Nです。この現象と関係あるかわかりませんが・・・参考までに。

  • aoi2008
  • ベストアンサー率42% (6/14)
回答No.2

#1です 今自分の環境(EUC-JP)で行ってみたんですが、質問者さんのようにはなりませんでした 英語の場合ということは、【a】でなくても、【abc】とかでもマッチしてしまうということですよね? MySQLクライアント上で > STATUS と打って Server characterset: Db characterset: Client characterset: Conn. characterset: は全てutf8になっていますか? おそらくデータベースの方に問題があると思います あとは、データベース(DBMSではなく内部のDB)を再構築してみるとかですかねー・・

takahathi
質問者

補足

返信ありがとうございます。 >> STATUS データベースはutf8で間違いないです。 >英語の場合ということは、【a】でなくても、【abc】とかでもマッチしてしまうということですよね? 英語と関係ない日本語とマッチしてしまうのは、英語が1単語のときに発現します。色々試してみたのですが、【a】【y】【i】【c】といった1文字を検索単語として入力してみると今までの現象が発現。 【ay】【fi】【ac】2文字以上の英単語の場合は、問題なくちゃんと動いているようです。 関連性が見出せないのでなんとも困っています。

  • aoi2008
  • ベストアンサー率42% (6/14)
回答No.1

こんにちは LIKE は単語検索ではなくて、文字列検索だったと思いますが。 つまり例えばその記事の中に I love hotcake という一文が存在した場合 LIKE '%a%' はhotcakeのaにマッチするので検索結果に含まれているのかと。 【aという単語】、ではなくて【aというアルファベット】が含まれていないか確認してみてください。

takahathi
質問者

お礼

すみません。再補足させてください。 今は 日本語の場合は、ちゃんと検索単語と一致したものを拾ってきます。 英語の場合、検索単語の一致したもの、プラス 一致しない記事を余計に拾ってくる。 という状況です。 代表的なものが【a】とうわけです。

takahathi
質問者

補足

回答して頂きありがとうございます。 aoi2008さんの通りに動作してほしいのですが、記事内にまったく【a】という単語がないにも関わらずその記事を拾ってきてしまっているので困っている状況です。 例えば掲示板で以下のような短い記事を作ったとして 【僕らは生きているのさ】 この記事には、【a】という単語はないです。でも select * from post where log like '%a%'; とやって検索するとこの記事が検索結果としてヒットするという状態です。 PS:まだ解決してません。

関連するQ&A