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

perl(5.8.8)+ mysql(4.0.24)でwebアプリを構築中です。

アプリ中で同時に接続するmysqlサーバが2つあり、それぞれの文字コードがsjis、utf8と異なります。また、これらを使った稼働中のサービスが既にあり、mysql側の文字コードを変更することはできません。

perlスクリプトの文字コードはutf8を使いたいと考えており、sjisのmysqlとのやりとりに際して、クエリ発行時や結果取得時にperl側で文字コードの変換が必要になると思います。

mysqlへの接続にはDBIを使うつもりですが、この場合、文字コードの変換をどの箇所で行うのが最も効率が良いでしょうか。

1回1回変換すれば正常に動作することはわかっていますが、今後、mysqlの文字コードが変更になった時などにもスムーズに対応できるよう、できれば1箇所に処理をまとめたいと考えています。

DBIのサブクラスのようなもので実現することになると思うのですが。。
DBIを使う以外でもこんないい方法があるよ!というような回答でも結構です。

よろしくお願いします。


●質問者: omoon
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:24 DBI MySQL Perl SJIS
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● wnagata
●35ポイント

クライアント側の文字コードがUTF-8のときは、

SQLを呼び出す前に、MySQLに対して、

set names utf8

を実行すれば、よいのです。

http://www.wikiroom.com/asakura/index.php?MySQL%2FUTF8

◎質問者からの返答

ご回答ありがとうございます。

ただ、mysqlのバージョンが4.0のため、これじゃダメなんですよねー。もうちょっと明確に質問すべきでした。

このあたりも悩みの種なんです。


2 ● b-wind
●35ポイント

DBD::mysql - MySQL driver for the Perl5 Database Interface (DBI) - search.cpan.org

実際にコードを実行するのは DBD なので、いじるなら DBD::mysql の方ですね。


で、ドキュメントを見る限り、

すべてのクエリは DBD::mysql::db パッケージの prepare メソッドを経由するようです。

DBI::DBD - Perl DBI Database Driver Writer's Guide - search.cpan.org

したがって、このメソッドに細工するのが手っ取り早そうです。

◎質問者からの返答

ご回答ありがとうございます。なるほど、ナイスヒントです。やはりそういうことになりますよね。

その場合は、DBD::mysqlのサブクラスを作成するような感じになるのでしょうか。

DBIからの呼び出し方法など、ちょっとこれから模索してみます。

このあたりの方法へのアドバイスなども、この後の回答でいただければうれしいです。

【追記】

その後色々調べていて、ここにたどり着いています。

http://search.cpan.org/~timb/DBI-1.58/DBI.pm#Subclassing_the_DBI

やっぱりDBIをごにょごにょする方向かな、と思っているんですが。。。

まだまだ回答受付中です。

【追記2】

http://d.hatena.ne.jp/omoon/20070710/1184034594

ここに進展を書きました。踏まえて、引き続きご回答お待ちしています。

関連質問


●質問をもっと探す●



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