2021年10月27日(水) 09:48 JST

ちいたんでUTF8&複数DB

  • 2009年11月17日(火) 00:54 JST
  • 投稿者:
    nonoz

じつはWebシステムではなかったりするのですが・・・・

とあるWebシステムで使っている複数のDBからいろいろ集計するために毎日定時にバッチ処理を走らせようとするもの。これを「ちいたん」使ってやってみることに。

ビューは使わず、action()内にやりたいことを記述してけば、コマンドラインのスクリプトと同等に動きます。

ところが、あるDBのテーブルから値を取得して別のDBのテーブルへ値を書き込むことはできたのですが、日本語の文字列が文字化けしています。



文字コードの設定をしなきゃいけないのだな、というのはわかりましたが、「ちいたん」の公式ページによれば、config_models()内に「$controller->db->query( "SET NAMES ujis" );」を書けというもの。今更 "SET NAMES xxxx"はないだろう・・・ ということで、「mysql_set_charset('utf8');」を config_models()内に入れると・・・権限がないというエラーがでてしまいました。(;_;) ふぇぇ~ん。 MySQLにコネクションした後でないとダメですねぇ。

ということで、「ちいたん」のdb/mysql.sqlの mysql_connectしているとこの後ろあたりに、mysql_set_charset('utf8')を入れました。これで無事に日本語が扱えるようになりました。

次に、複数DBを扱う方法ですが、「ちいたん」公式ページによれば、config_database()内の$db->addで設定名を入れてやることと、モデルのnameプロパティを使えばできるということでしたが・・・・

model->name = "dbnameA"; をして、dbnameAの設定したDBにアクセスでき、model->name = "dbnameB"; をして、dbnameBの設定したDBにアクセスできるのですが、その後さらに、model->name = "dbnameA"; をしてもなぜかdbnameBの設定DBにアクセスしにいきます。うぉぉ~~~

print_r($c->db); としてみると、コネクションがすべて同じ番号になっています。あれ???

よく見てみるとmysql_connect()が 3つしか引数をとっていません。違うDBなのに同じホストなので再利用扱いになっているようです。4つ目の引数に trueを入れてやると、違うDBとして新たにコネクションをはってくれました。これで意図する動きになりました。

ここまで到達するのに数時間も費やしてしまいました。

トラックバック

このエントリのトラックバックURL:
http://nzlab.nztype.net/trackback.php?id=20091117005458784
表示形式
コメント投稿

コメントは投稿者の責任においてなされるものであり、サイト管理者は責任を負いません。