奥野さん

ご返信ありがとうございます。助かります。
TEXTの上限は使用可能メモリなどに依存するのですね。


2009/06/12 9:46 Mikiya Okuno <Mikiya.Okuno@sun.com>:
坂井田さん、

On 12/06/2009, at 9:17 AM, 坂井田保彦 wrote:

> 本件、TEXTを使うとよいとアドバイスしていただいて、テーブルも作ることができたのですが
> 新たな疑問がわいてきましたので詳しく教えていただけないでしょうか?
>
> なぜTEXTだと行サイズを超えても作れるのでしょうか?

格納する領域が異なるからです。TEXT/BLOBが格納される領域は、内部的な隠れたテーブルです。
ただし、TEXTの場合でも、先頭の255バイトは通常と同じ領域に格納されるのでご注意ください。

> また、TEXTの場合の上限は決まっているのでしょうか?

通常のTEXT/TINYTEXT/MEDIUMTEXT/LONGTEXTと同じです。

--
Mikiya Okuno, MySQL Support Engineer
Sun Microsystems KK, Tokyo, Japan
http://www-jp.mysql.com/

>
> 2009/06/08 15:48 Mikiya Okuno <Mikiya.Okuno@sun.com>:
> 奥野です。
>
> エラーメッセージにも表示されている通り、MySQL Clusterは内部的に8052バイトという行サイズの上限があります。
> VARCHAR(2700)はutf8の場合、最大で2700 * 3 = 8100バイトになってしまいますので、行サイズの上限を
> 超えてしまうことになりますので作成することが出来ません。
>
> TEXTを利用するか、8052バイトの制限を超えないようにテーブルを設計しましょう。
> --
> Mikiya Okuno, MySQL Support Engineer
> Sun Microsystems KK, Tokyo, Japan
> http://www-jp.mysql.com/
>
> On 08/06/2009, at 3:31 PM, 坂井田保彦 wrote:
>
> > 坂井田と申します。
> >
> > MySQL Clusterをディスクベースで使用しています。
> > varcharで2700バイトのカラムを作成しようとすると、ERROR 1118が発生します。
> > クエリのストレージエンジン部分だけをInnoDBに変えて試したところテーブルを作成することができましたので
> > ストレージエンジンの違いによるものだと思うのですが。。。NDBを使用した場合のvarcharのrow sizeの最大値はいくつになるのか
> > お分かりになる方はいらっしゃいますか?
> >
> > ■NDB
> > mysql> CREATE TABLE `lengthtest` (   `hoge` varchar(2700) DEFAULT NULL ) TABLESPACE ts_1 STORAGE DISK ENGINE=NDB DEFAULT CHARSET=utf8;
> > ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8052. You have to change some columns to TEXT or BLOBs
> >
> > ■InnoDB
> > mysql> CREATE TABLE `lengthtest` (   `hoge` varchar(2700) DEFAULT NULL ) TABLESPACE ts_1 STORAGE DISK ENGINE=InnoDB DEFAULT CHARSET=utf8;
> > Query OK, 0 rows affected (0.24 sec)
> >
> > ■テストした環境
> > Red Hat ES 4.6
> > MySQL Cluster 7.0.5(RPM版)
>
>
>