[MySQL] 大きなデータを保存する

Posted by
ぴろり
Posted at
2006/05/27 07:37
Trackbacks
関連記事 (0)
Post Comment
コメントできます
Category
開発メモ カテゴリ

 MySQL で数Mバイト程度の大きなデータを保存するための覚書。

このエントリーをはてなブックマークに追加  

$sth = $dbh->prepare ('INSERT INTO `foo` (column) VALUES (?)');
$sth->bind_param (1, $large_data);
$ret = $sth->execute
	or die $dbh->errstr;

 $large_data が数Mバイトを超えるデータの場合、$sth->execute の時点で、パケットサイズが大きすぎる旨のエラーが表示される。一度にやり取りできるデータサイズ max_allowed_packet は SQL の SHOW VARIABLES で調べることができます。

SHOW VARIABLES LIKE "max_allowed_packet"

 さくらインターネットのレンタルサーバで稼動している MySQL サーバの場合 4M。
 max_allowed_packet を変更するには、1) my.cnf 設定ファイルを変更するか、2) デーモン起動の際のオプションで指定できるが、レンタルサーバなのでそういうわけにもいかない(´・ω・`)

 大きなデータは max_allowed_packet 以下のサイズに分割して、複数のエントリとして保存するくらいしかできないのかな?

my $large_data = 'a large data...';
my $packet_size = 4096 * 1024 * 1024;

for (my $loop_flag = 1; $loop_flag; ) {
	my $write_data;
	if ($packet_size < length $large_data) {
		$write_data = substr $large_data, 0, $packet_size;
		$large_data = substr $large_data, $packet_size;
	} else {
		$write_data = $large_data;
		$loop_flag = 0;
	}
	;# Insert $write_data into database
}
このエントリーをはてなブックマークに追加  



関連記事/トラックバック

関連記事/トラックバックはまだありません

この記事にトラックバックを送るには?

コメントを投稿する

 
 (必須, 匿名可, 公開, トリップが使えます)
 (必須, 匿名可, 非公開, Gravatar に対応しています)
 (必須)
スパム コメント防止のため「投稿確認」欄に ランダムな数字 CAPTCHAについて を入力してから送信してください。お手数ですがご協力のほど宜しくお願いいたします。