人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

MySQL+perlがうまく動きません。
スクリプトはEUC,データベースの文字コードはSJISで構成されています。
Linux上で構成されたMySQLのバージョンは4.0.27です。

SHIBA というテーブルに「芝浦」「東芝」というデータが入っていて、
「芝」を含むデータを選択したいと思っているのですが、

use Jcode;
use DBI;

$code="%".jcode('芝')->sjis."%";
$db = DBI->connect('DBI:mysql:host', $user, $passwd);
$sqlbun="select * from SHIBA where koumoku like ?;";
$sth = $db->prepare($sqlbun);
$sth->execute($code);
$sth->finish;
$db->disconnect;

これで選択できません。
「芝浦」や「東芝」と指定すると、選択できます。
「浦」でも選択できます。

プレースホルダを使用しないで、
$sqlbun="select koumoku from SHIBA where koumoku like '%芝%';";
$sth = $db->prepare(jcode($sqlbun)->sjis);
$sth->execute();
とすると選択できます。

MySQLのログを見ると、
select koumoku from SHIBA where koumoku like '%ナ%'
となっています。(↑の「ナ」は半角で入っていました)

これは何が原因なのでしょうか?
MySQLの文字コード・バージョンを変更する以外に
対処方法はないでしょうか?

●質問者: bonyan
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:CONNECT dB DBI EUC Linux
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● heilig_zwei
●60ポイント ベストアンサー

文字コードを見てみると、

sjisの「芝」、euc-jpの「ナ(半角)」が共に"8E C5"のようです。

http://www.shtml.jp/mojibake/hankaku_euc.html

おそらくprepareした時点で文字コードがeucなので、

そこに$codeを入れることに問題があるようです。

プレースホルダーを使わないってのはダメですか?

◎質問者からの返答

ありがとうございます。なるほど、芝とナは同じ文字コードなんですね。

上記URLを見ると、他にもこのような動作をしてしまいそうな感じがありますね。。

でもなぜ「芝浦」では絞り込めるのでしょうかね?・・・

プレースホルダーを使用しない、となるとどのような方法がありますでしょうか?

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ