[前][次][番号順一覧][スレッド一覧]

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 <]