Mysqlの接続について
現在、以下のようなperlのスクリプトを作っているのですが、mysqlへの接続,切断は以下の場合、どちらにした方がいいのでしょうか?
(1)の場合
use DBI;
$dsn="DBI:mysql:database=dbname:host=localhost";
$dbh=DBI->connect($dsn,'user','pass');
$sth = $dbh->prepare("SELECT no,title,name,date,host From `table1` where no='1'");
$sth->execute;
$sth->fetchrow_array;
$sth->finish;
$sth2 = $dbh->prepare("SELECT no,title,name,date,host From `table2` where no='1'");
$sth2->execute;
$sth2->fetchrow_array;
$sth2->finish;
$dbh->disconnect;
(2)の場合
use DBI;
$dsn="DBI:mysql:database=dbname:host=localhost";
$dbh=DBI->connect($dsn,'user','pass');
$sth = $dbh->prepare("SELECT no,title,name,date,host From `table1` where no='1'");
$sth->execute;
$sth->fetchrow_array;
$sth->finish;
$dbh->disconnect;
$dsn="DBI:mysql:database=dbname:host=localhost";
$dbh=DBI->connect($dsn,'user','pass');
$sth2 = $dbh->prepare("SELECT no,title,name,date,host From `table2` where no='1'");
$sth2->execute;
$sth2->fetchrow_array;
$sth2->finish;
$dbh->disconnect;
(1)の場合と(2)の場合の違いは、(1)の場合、最初にデータベースに接続して、一番最後に切断する事で、(2)の場合、毎回データベースへの接続と切断を行う事が違います。
(2)の場合、毎回接続と切断を行うので、2回ほどではあまり変わらないかもしれないのですが、もし10回とか接続と切断を行うとかなり負荷が高くなるような気がするのですが、他のHPなどを拝見すると接続をしたら切断を行うように癖をつけるようにした方がいいと書かれていたりします。
どちらの方が正しいやり方というか、負荷がすくなく使えるのでしょうか?
お礼
回答ありがとうございます。 BIN=BINARYということですね。ありがとうございます。 WorkBenchを使用してないので普通のMySQLコマンドからではどう表示されるかわかりませんが、BLOB型を指定していたら自動でBINARYつくわけじゃないんですね。 調べていたところ、どうもBLOB型がわるかったらしく(64KBしか格納できない)画像はOKでxlsやpdfがファイル壊れていたのはファイルサイズの問題のようでした。バイナリデータが途中で切られているみたいです。 まだ実際に確認できてはいないのですがもっと大きい型にすればファイル壊れないですむのかな?と思っています。 お手数おかけしました。
補足
今手元に環境がないため、 vmwareで環境を作りMySQLに同じスクリプトからデータを突っ込んでみたのですがデータが壊れるということがありませんでした。 default-character-setとかそのあたり現象が発生した環境とは違いがあるのかもしれませんが、今環境がみれないのでそのあたりの違いはわかりません。 ただ気になったのが今作成した環境では日本語ファイル名でも文字化けは起こらず格納されたのですが問題の環境では日本語ファイルだと文字化けして保存されていたことです。 問題の環境は文字コードの設定に問題があるのかもしれません。