mysql:3176
From: Tomohiro Takahashi <Tomohiro Takahashi <t_takahashi@xxxxxxxxxx>>
Date: Tue, 06 Feb 2001 22:55:46 +0900
Subject: [mysql 03176] Re: フィールドへ格納可能なサイズについて
高橋(智)です。 Mitsuru Maruno wrote: > > MARUです。 > 現在、LONGBLOB型のフィールドへデータを挿入するテストを行っているの > ですが、約16MB位以上のデータをINSERTする事が出来ません。何か制限が > あるのでしょうか?下記のようなSQLです。(LOAD_FILE関数を使っています) > > update t1 set dt=load_file("d:/temp/test.dat") where id=1 > > サーバの設定でmy.iniファイルの中で、 > max_allowed_packet=30M 'パケットの最大サイズを30Mと設定 > としています。 JDBCドライバを拡張していて分かったのですが、MySQLが規定しているパケット の構造に原因があると思います。MySQLが受信するSQL文や、MySQLが送信する結果 セットををパケットととして送信する場合、そのパケットの先頭にSQL文全体の長 さをセットすることになるのですが、セットできるサイズが約16MBまでなのです。 具体的には、3バイトのフィールドでもってパケットのサイズを指定しまして、 最大のパケットサイズ L は L = x + (y * 256) + (z * 256 * 256) + 1 = 16843009 バイト (ただし 0 <= x,y,z =< 256 ) となり、約16MBになります。 ※ + 1 という余分なものは、それ1バイトでもってSQLコマンドの種別を示すため に使用されます。 で、このパケットの構造にもバージョンがあるようで、上位のバージョンの パケット構造を採用するようなドライバを作成すれば、壁を打ち破れるのかも しれません。しかし、詳しいことは分かりません。 どなたか詳しい方いらっしゃいませんか? > みなさん -- 高橋智宏 Java読書会( http://www.t3-jpn.com/bof/ ) T3-Japan( http://www.t3-jpn.com/ )
3167 2001-02-06 14:17 ["Mitsuru Maruno" <ma] フィールドへ格納可能なサイズについて -> 3176 2001-02-06 22:55 ┗[Tomohiro Takahashi <]