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を使う以外でもこんないい方法があるよ!というような回答でも結構です。

よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:2007/07/07 15:23:15
  • 終了:2007/07/14 15:25:03

回答(2件)

id:wnagata No.1

wnagata回答回数170ベストアンサー獲得回数182007/07/07 21:13:36

ポイント35pt

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

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

set names utf8

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

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

id:omoon

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

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

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

2007/07/08 09:28:26
id:b-wind No.2

b-wind回答回数3344ベストアンサー獲得回数4402007/07/08 00:09:02

ポイント35pt

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

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

id:omoon

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

その場合は、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

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

2007/07/10 11:42:33
  • id:omoon
    http://d.hatena.ne.jp/omoon/20070719/1184819170
    ここにその後の今のところの状況を書きました。
    よろしければごらんください。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません