こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

MySQL&PHPで日本語検索

PHP&MyQLでショッピングサイトを作ろうと制作中です。
今、MySQLで日本語検索ができず行き詰ってしまいました。
日本語を16進数に変換して検索させれば、うまくいきそうだと考えていますが、なかなかうまくいきません。
MySQLに登録した日本語データは「EUC」の文字コードを16進数に変換したものです。検索窓から入力した日本語の文字コードもEUCであれば、そのまま16進数に変換してマッチングしてやれば、検索できそうなのですが、
POSTで取得した日本語の文字コードが、どうしてもEUCになりません。
(mb_convert_encodingを使用してもだめだし・・・)
POSTで取得した文字列の文字コードの変換は、どうすればいいのでしょうか?

投稿日時 - 2005-07-15 15:31:51

QNo.1515448

すぐに回答ほしいです

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

> MySQLは日本語検索に対応していないので
「日本語検索に対応していない」は、誤り。
あんまり、上手い表現じゃないかもしれないが、
「設定等により、日本語検索が困難な場合がある」てな事。

EUCなら無条件で日本語検索できるというのも誤り
DBのセッティングがEUC向けになってる場合が多いだけって事。

MySQL4.1未満なら、DBのエンコーディングを調べるか問い合わせて、それにあわせるしかない
多少の誤検索があってもいいなら別

MySQL4.1以上を利用できるなら、なんでもOK
自分で、それにあわせたテーブルを作る必要があるけど
#除くベースエンコードがUTF8以外の場合

投稿日時 - 2005-07-15 18:14:16

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

「262332333536373b262333303033333b262332303538313b」を元に戻すと
小畑健
ですね。
POSTされた入力値の問題のように思います。
ちなみに私はEUCのまま無変換でMySQLにinsertして普通に検索出来ています。

投稿日時 - 2005-07-15 17:16:37

補足

-----------------(ソース)-------------------
<form method="post" action="serch.php">
<input type="hidden" name="mode" value="input">
<table>
<tr>
<td>作品名</td>
<td><input type="text" name="title" size="24" style="width:150px; height:20px"></td>
</tr>
<tr>
<td>作者名</td>
<td><input type="text" name="name" size="24" style="width:150px; height:20px"></td>
</tr>
</table>
<input type="submit" value="検索する">
</form>
-----------------(ソース)-------------------

上記のように検索窓を作成して、POSTしています。
POST値を取得した時点で、文字コードがEUCでない
ということでしょうか。
MySQLに入っているデータはEUCですので、
検索キーもEUCである必要がありますよね?

投稿日時 - 2005-07-15 17:25:43

ANo.1

>MySQLに登録した日本語データは「EUC」の文字コードを16進数に変換したものです
是非とも、その日本語データのサイズの最大長と、
その変換方法を教えてください。

また、変換されている理由はなんですか?
データ保護のため、それとも検索のため?

かなり回り道している予感がする

投稿日時 - 2005-07-15 16:23:35

補足

作ろうとしているショッピングサイトというのは、マンガの販売サイトです。
ですので、マンガのタイトルや作者名で商品を検索する機能をつけたいと思っています。

たとえば「DEATH NOTE」(作者:小畑健)というデータがあったとします。
検索条件が「作者名:"小畑"」の場合、
SQLで「SELECT * FROM table WHERE auth LIKE "%小畑%"」とやれば、
該当するデータ(DEATH NOTE)が検索結果として表示されるだろうと思っていましたが、
実際やってみるとうまくいきませんでした。

なぜ日本語データを16進数に変換しているかというと、
MySQLは日本語検索に対応していないので、
16進数に変換して検索する必要があると、
個人がやっている解説サイトで見かけたからです。
しかし、「小畑健」(EUC)をunpack("H*hex", "小畑健")として16進数に変換してやると、
「beaec8aab7f2」となり、
検索窓からPOSTされた「小畑健」を同様にunpackで16進数化すると、「262332333536373b262333303033333b262332303538313b」になってしまいます。
恐らく文字コードが違うことが原因だと思うのですが・・・。
もしかして、16進数化する必要はないのでしょうか??

投稿日時 - 2005-07-15 16:42:14

あなたにオススメの質問