データベースでの文字化けによる検索エラーを解決する方法

このQ&Aのポイント
  • MySQLで構築したデータベースのフィールドを検索する際に、文字化け防止のために¥マーク(エスケープ文字)が使用されている場合、検索がうまくいかない問題が発生します。
  • この問題を解決するためには、LIKE演算子を使用した検索文においてエスケープ文字を無効化する必要があります。
  • 具体的な解決方法は、検索文においてエスケープ文字の前にさらにエスケープ文字を追加することです。例えば、検索値が「イソノ」の場合、検索文は「%イソ\ノ%」となります。このようにすることで、エスケープ文字が正しく認識され、検索が正常に実行されます。
回答を見る
  • ベストアンサー

SQLで検索したいのですが..

MYSQLで構築したデータベースのあるフィールドを検索したいのですが、データベースには文字化けしないように¥マーク(エスケープ文字!?)が入っているのです。 (例「イソノサザエ」は「イソ\ノサザエ」となっています) このような場合 select * from ○△table where name LIKE '%イソノ%'; とやっても"\"が入っているために検索がヒットしません。 どのようにすればselect文にヒットしてくれるでしょうか? アドバイスお願いします。 わかりにくい文章ですいません。 もしかしたらデータベースのカテゴリに書き込みしなくてはならないのかもしれませんが、perlのカテゴリに書込みさせて頂きました。

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

  • ベストアンサー
回答No.2

あ、すみません。定義してるのに実際に使ってませんね。 select * from ○△table where name LIKE '%イソ@\ノ%' ESCAPE '@'; これではどうでしょう? エスケープ文字は実際なんでもよいですよ。 &でも、~でもいいと思います。(文字列中に使われてなければですが)

mtakaeic
質問者

お礼

返信遅れて申し訳ありません。 教えて頂いた通りにやったらできました! 有り難う御座いました。

その他の回答 (1)

回答No.1

エスケープ文字は自分で設定できますよ。 select * from ○△table where name LIKE '%イソ\ノ%' ESCAPE '@'; で、どうでしょうか?

mtakaeic
質問者

お礼

ありがとうございます。 さっそく試したところ ERROR 1064 at line 1: You have an error in your SQL syntax near '@ESCAPE '@'' at line 1 とでてしまいました。 んーんなにが原因なんでしょう? それとESCAPEはなぜ@なのでしょうか? ¥をハジクのに@なのですか?

関連するQ&A

  • 初歩的質問 文字列を検索しヒットした件数を得たい

    MySQL初心者でどのようなコードを書けばいいかわかりません。 やりたいことはこうです。 特定のフィールド内においてある文字列を検索し、ヒットした件数を得る。 SELECT COUNT(fff) FROM test_table LIKE 'moziretu'; こう書いてもできません。 どう書けば実現できるんでしょうか?

    • ベストアンサー
    • MySQL
  • 大文字小文字を識別しない検索方法について

    DBに例えば、nameフィールドに"SUzuKI"と登録されていたとします。 この場合に、SQLで、"select * from table where name LIKE '%uzuki%';"と検索してもヒットしません。大文字小文字を判別するからです。大文字小文字を判別しない検索方法についてお分かりになる方がいらっしゃいましたら、ご教示をお願いいたします。 よろしくお願いいたします。

  • MySQLで日本語検索

    MySQL初心者のものです。 今PHPとMySQLを利用して検索システムを作っています。 しかし日本語検索がどうしてもうまくいきません。 一応「教えてgoo」でも探してみたのですが、解決しませんでした。 MySQLで、 テーブル名 table フィールド名 field とすると、 select * from table where field like '%キーワード%'; のように検索してみたのですが、思うような結果が返ってきません。 ネットで検索すると「senna」をインストールと書かれていましたが、 そういったものをインストールしなければMySQLで日本語検索は出来ないものなのでしょうか? ちなみに MySQL5.0 PHP5.2.1 を利用しています。

  • MySQL WHERE句のLIKE検索

    初心者ですみません。 MySQL WHERE句のLIKE検索で、引っかかった文字列を 除いた項目を表示させるにはどうしたらいいでしょうか。 例えば、 SELECT * from [テーブル名] where [フィールド名] like '%あ%'; として、「あ」が入っているレコードを検索し、 該当しないレコードを表示させる。 どうか教えてください。よろしくお願いします。

  • SQLのLIKE検索で清音と濁音/半濁音を区別する

    VB2008+Accessでアプリケーションを開発しています。 SQLのLIKE検索では、清音と濁音/半濁音、ひらがなとカタカナ等を区別してくれないのですが、これを区別してくれる方法はないでしょうか? 例:(field1はテキスト型フィールド) SELECT * FROM tblA WHERE field1 LIKE '%グラス%' を実行すると、 「クラス」「思いめぐらす」なども検索されてしまいます。 これを、 「サングラス」「グラスワイン」などだけがヒットするようにしたいのです。 ちなみに、MySQLではコチラに回答がありました。 http://oshiete1.goo.ne.jp/qa3918969.html Accessだけが不可能で、SQLServerやOracleならできるかどうかも知りたいです。どうぞ宜しくお願いします。

  • MSアクセス2013のSQLでESCAPE文字指定

    MSアクセス2013のSQLでLIKE検索時のエスケープ文字を別の文字に変更する ESCAPEキーワードを記述したら『演算子がありません』とエラーになったのですが 使えないんですか? select * from テーブル where 項目 like 'abc' ESCAPE '#' ;

  • sjisでのあいまい検索を教えてください

    Postgres8です。 データベースのエンコーディングは【SQL_ASCII】です。 LIKE検索をした場合のSJISの文字化けに対する対処方法を教えてください あいまい検索をしたいのですが、 文字化け対象文字を含む場合、 どのように記述すればいいのですか? select * from aaa where name = 'パソ\コン'; 上記のように完全一致で検索をすると抽出できます。 select * from aaa where name like '%パソ%' 上記のよう指定してlike検索をしても抽出できます。 しかし以下の場合どちらでも抽出できません。 select * from aaa where name like '%パソコ%' select * from aaa where name like '%パソ\コ%' よろしくお願い致します。

  • 2つフィールドを連結して検索するには

    MySQLの初心者です。よろしくお願いします。 1つのテーブルにある2つのフィールドのうち、どちらかにキーワードが入っている場合(両方に入っている場合も含む)を抽出したいのですが、検索するキーワードが1個の場合は、下記のようにすれば、うまく動くのですが、 ●1個のキーワードで検索する場合 (例として、2つのフィールドのうちどちらかに「山」のキーワードが入っている場合を抽出) select * from table WHERE (item_name LIKE "%山%" or outline LIKE "%山%" ) ●テーブルの内容(テーブル名:table) item_name | outline ==========+========= 山がある + 山と川 ----------+---------- 山がある + 川と森 ----------+--------- 山がある + 谷と林 --------------------- 質問したいことは、上記のテーブルから、item_nameとoutlineのフィールドのうち、2つのキーワード「山」と「川」が両方含まれるレコードを抽出したいです。上記のテーブルでいうと、抽出の結果、1行目と2行目が抽出したいのです。 ちなみに、下記のように記述したら、上記のテーブルで1行目だけ抽出されます。 select * from table WHERE (item_name LIKE "%山%" and item_name LIKE "%川%" or outline LIKE "%山%" and outline LIKE "%川%" ) 他にも、下記のように試してみたのですが、うまく抽出できませんでした。 SELECT * FROM table WHERE (concat(item_name,outline) LIKE '%山%' and concat(item_name,outline) LIKE '%川%') item_nameとoutlineのフィールドを結合して、結合した文字列で、「山」と「川」の両方が入っているレコードを抽出する方法はありますか? 2つのフィールドの文字列をあわせたなかから、「山」と「川」のキーワードが両方含まれるレコードを抽出したいのですが、何かよい方法はありますでしょうか。ご回答よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • MySQLにおける検索結果

    Windows2000のIISでMySQLをインストールしました。 インストール自体はうまくいき、 また、ODBCを入れてAccessから接続もできるようにしました。 ところが、このAccessから検索をしたところ、 検索結果がおかしいのです。 【環境】 Windows2000 IIS MySQL Ver.3.23.38 Access2000 【検索SQL】 Select * from table where name like 'て% 【結果】 name ----- ゆきたに ゆら 上記のように「name」の上1文字が「て」で 始まるデータとしたはずなのに、「ゆ」で始まるデータが 出てきてしまいました。 同じく上1文字が「と」で始まるデータで検索をしても、 同じ結果が出ています。 念のため、likeではなく、Left(name,2) = 'て'又は'と'で 検索もしましたが、同じ結果でした。 何が悪いのでしょうか? よろしくお願いします。

  • 月に対応するフィールドを抽出するSQL

    検索がまずいのか、過去ログに見当たりませんでした。 よろしくお願いします。 以下を実行して、テーブルを作成したとします。 CREATE TABLE table_name (date1 date ,data varchar(20)) データを入力して、 date1 data field1 2004-03-01 AAA field2 2004-03-02 BBB field3 2004-03-03 CCC field4 2004-04-01 DDD これから、3月に対応するフィールドだけを抽出する クエリー文を教えてください。 SELECT * FROM table_name WHERE date1( 以下の文 ) 実際のデータベースでは、月締め計算をしたいのです。 日付は、上記と同じ date 型です。 PHP+MySQLで動かしています。 POSTで実際に受け渡される値は、「2004-3」です。