• 締切済み

PHP+mysqlでの検索について

データベースの方で同じ質問をしましたが、カテゴリー的にはこちらの方が適当だと感じましたので、再度このカテゴリーで質問させていただきます。 以前、このカテゴリー内で「MYSQLで違う検索結果が出てしまいます。」という質問をした者です。 再度同じような壁にぶつかってしまい悩んでいます。 具体的には以下のよう状態です。 テスト環境(会社のパソコン) PHP4.2.3 mysql4.0.5 検索結果~異常なし 公開環境(レンタルサーバー) PHP4.1.2もしくは4.2.1(サーバーによって違うということです) mysql3.23.46 検索結果~正しい検索結果が出ない となっています。 検索語がカタカナor漢字の場合は正常に動作するのですが、ひらがなだと「な」と「に」、「に」と「り」などがごちゃごちゃになるらしく、 例えば、検索語で「うに」と入れると「うに」と「うり」が検索結果として返ってくるのです。 文字コードの設定かとも思ったのですが、テストの環境の方では正しい検索結果が出ていますし、mysql内の文字コードもテスト環境はもちろんですが、レンタルサーバーの方でも「文字コードにEUC文字コードを利用して下さい」ということから、テスト環境と同じく default-character-setはujisになっていると思われます。 あとはPHP・mysqlのバージョンの違いくらいしか思い当たるところがありません。 どなたかアドバイスいただけるとありがたいです。 よろしくお願いいたします。

みんなの回答

  • mason
  • ベストアンサー率56% (9/16)
回答No.2

character-setが「latin」の場合は、確かに「な」と「に」、「に」と「り」が正常に認識されないようですね。実際、自分もキャラクターセットをlatinで確認しました。 テスト環境で正常に動作確認されて、レンタルサーバーでそうなるということは、レンタルサーバーのMySQLサーバーが「ujis」で動いてないかもしれませんね。 レンタルサーバーでSSH接続可能なら >mysq show variables; で確認して見てください。character_setがujisなら問題ありません。SSHがない場合はphpMyAdminでも確認できます。トップページ(ようこそ画面)で「MySQLのシステム変数」をクリックしてみて下さい。

参考URL:
http://www.mysql.com/doc/en/SHOW_VARIABLES.html
rimuse
質問者

補足

ご回答ありがとうございます。 レンタルサーバーはSSH不可でした。 phpMyAdminも確認したのですが、そのような項目はありませんでした。 phpMyAdminのバージョンは2.2.6でトップページ(ようこそ画面)にあったのは ・Language ・phpMyAdminのドキュメント ・phpMyAdminホーム ・[ChangeLog] ・[CVS] ・[Lists] という項目のみです。 レンタルサーバーの方をよくよく調べてみると、FAQの部分に「MYSQLのデフォルトキャラクターセットはujisです。」と、明記されていました。 システム変数については、ホスティング業者に問い合わせてみます。

すると、全ての回答が全文表示されます。
回答No.1

> 文字コードの設定かとも思ったのですが、テストの環境の方では正しい検索結果が出ていますし、 > mysql内の文字コードもテスト環境はもちろんですが、レンタルサーバーの方でも「文字コードに >EUC文字コードを利用して下さい」ということから、テスト環境と同じく > default-character-setはujisになっていると思われます。 検索文字入力、結果出力の htmlの文字コードも EUCになっていますか。 ujisは昔のeucコード指定方法で、現在は EUC-JPです。 htmlのcharasetも同様に x-euc-jpから EUC-JPになってます。 それと検索部分の PHPスクリプトはどうなってるのでしょうか。

rimuse
質問者

補足

早速のご回答ありがとうございます。 >EUC文字コードを利用して下さい」ということから、テスト環境と同じく > default-character-setはujisになっていると思われます。 この部分はmysqlの設定の部分です。 htmlは全てeuc-jpで統一されています。 キーワードは受け渡しされるときにはpostでやり取りをしているため、その部分で文字化けすることはないと思います。(確認のため、文字コードをSJISからEUCに変換したところ、文字化けを起こしました) その他にも、いろいろな段階でキーワード$keywdを出力しましたが、特に文字化けは見られませんでした。 キーワード検索部分のスクリプトについては以下のように記述しています。 $blank = " "; $keywd = str_replace($blank, " ", $keywd); $arykey = explode(" " , $keywd); 前段階として、キーワードを複数入力されたときの処理として、キーワード$keywdをexplode関数で切って、配列として格納します。 $sql = "SELECT * FROM img WHERE (search Like '%".$arykey[0]."%' OR descript Like'%".$arykey[0]."%')"; for($i=0;$i<sizeof($arykey);$i++){ //キーワードの数だけループ $sql.="AND (search Like '%".$arykey[$i]."%' OR descript Like'%".$arykey[$i]."%')"; } この部分でLike演算子を使って検索をします。 以上のように記述しています。

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

関連するQ&A