mysql:10526
From: 原田誠 <原田誠 <makoto@xxxxxxxxxx>>
Date: Sat, 27 Nov 2004 18:21:32 +0800
Subject: [mysql 10526] Re: MySQL-4.1.xのInnoDBで、大きなレコードがINSERTできない
原田です。情報ありがとうございます。 > 行の最大長は、BLOBとTEXTコラムを除いて、データベースページの半分より少し > 短い。すなわち、行の最大長はおよそ8000バイトである。 > LONGBLOB及びLONGTEXTカラムは4GBより短くなければならず、BLOB及びTEXTカラ > ムを含んだ行の長さの合計は4GBより短くなければならない。 > --- > > ということのようです。 > > 制限事項としてマニュアルに明記しているくらいなんで、すぐには修正されない > ような気がします。 > 要は8000bytesを超えるならBLOBかTEXTを使えということではないでしょうか。 CHAR(1000)などは、TEXTに変換されるので、TEXTでも8000byteの制限が起こって いるようです。(カラム数が11個以上の場合) mysql> create table a( b char(777) ) type=innodb; mysql> desc a; +-------+------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+------+------+-----+---------+-------+ | b | text | YES | | NULL | | +-------+------+------+-----+---------+-------+ 1 row in set (0.03 sec) もしかしたら、CHAR(1000)ではなく(明示的に)TEXTにしたら起こらなくなるか も・・・4.1.6では同様のエラーが起こるが、4.0.16ではエラーが起きないで正 常に働きました。 4.0.16から4.1.6までの間に、エンバグしたのでしょうか。 4.0.16の時点では、明示的にTEXTを指定しないと mysql> create table a( b char(777) ) type=innodb; ERROR 1074 (00000): Too big column length for column 'b' (max = 255). Use BLOB instead と言われますね。逆にTEXTを明示的に指定することで、8000byteの制限もクリア されるようです。 TEXTを明示的に使う+4.1.xでは気まぐれな8000byteの制限に気をつける+5.0.0 では修正されてる模様、という感じですね。 マニュアルの制限とは別物として、バグトラックに投稿したほうがよいでしょう か? > ちょっと気になることとしては、 > http://dev.mysql.com/doc/mysql/ja/InnoDB_restrictions.html > に日本語マニュアルを見ると、 > > --- > InnoDB の 3.23.40 以下のバージョンでは、レコードの最大長がデータベース > ページの半分よりもやや小さい。ソースリリース 3.23.41 より、BLOB および > TEXT カラムを 4 GB 未満にすることが可能となった。レコードの合計の長さも > 4 GB 未満でなければならない。 > --- > > とあります。 > > 訳が古いのだと思いますが、バージョンの言及があり、読むと3.23.41以降でこ > の8000bytesの制約がなくなっていたバージョンがあったかのように取れます。 > > どうなんでしょう。 > > -- 原田誠 <makoto@xxxxxxxxxx>
@ 10516 2004-11-26 20:09 [原田誠 <makoto@xxxxx] MySQL-4.1.xのInnoDBで、大きなレコードがINSERTできない 10517 2004-11-26 20:33 ┗["佐野 大輔" <d-sano@] 10518 2004-11-26 21:33 ┣[原田誠 <makoto@xxxxx] 10519 2004-11-27 01:34 ┗[George Akimoto <geor] -> 10526 2004-11-27 19:21 ┗[原田誠 <makoto@xxxxx]