平成30/ 2018-10-24 06:41
MYSQL/ varchar制限エラー

このメッセージで、varcharが登録できないときがある。
#1118 - Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs

どうやら必要記憶容量が合計(65,534バイト)※MyISAM テーブルのとき
超えてるとエラーでるみたい。
// InnoDBの行サイズの上限はページサイズの約半分で、デフォルトでページサイズは16KBなので、デフォルトでは約8000バイトだそうです。

varchar(255)で、UTF8の場合は
255 x 3 = 765バイト必要記憶容量が必要。もう少し多いかもしれない。

blob, text型は、5から9バイト必要記憶容量必要とのこと。

なので1つのテーブルで、
varchar(255)が85くらい超えると上記のエラーが出やすくなる。

また、
何でも、text型にすればいいわけではなくて、
text 型でも、先頭768byte は、カウントされるので、
768byte を超えるカラムが多くあると、エラーになる。

varcharはインデックスはりたい項目にのみ設定すべきだし、そのくらいカラムが多くなるのであれば、別テーブルが望ましいのだろう。


( Thanks. )
【MySQL】 Got error 139 from storage engine → text, blobのカラムが多すぎ
http://www.softel.co.jp/blogs/tech/archives/2580

MySQLのカラム型(有効範囲と必要記憶容量)
http://phpjavascriptroom.com/?t=mysql&p=columntype

MySQL 5.1 の varchar カラムの怪しい動き-その2
http://d.hatena.ne.jp/kameid/20091201/1259638882

mysql InnoDB での最大行長について
http://maruta.be/intfloat_staff/132