この記事について
| 環境 | さくら共有サーバー、mysql(InnoDB) |
|---|---|
| 目的 | updateでカラムを増やしたときに出たRow size too largeエラーを解消する |
| 結果 | my.cnfはいじれないので、不要なカラムを削除して対応した |
つまずきポイント要約
- InnoDBの最大行長(1行に格納できるデータ量)は約8000バイト
- VARCHAR(255)やTEXTのカラムが11より多いと発生する可能性が出てくる
- innodb_file_formatの変更にはmy.cnfが必要で、さくらの共用プランではいじれない
事象
mysqlでupdateをしてデータを増やそうとしたらエラーが出た
エラー内容
Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline.
原因
これは「InnoDBの最大行長(最大行サイズ)は約8000バイト」なので発生したエラー。
最大行サイズとは、一行ごとに格納できるデータの最大容量。
VARCHAR(255)やTEXTは最大で800バイト弱を使用するので、そういったカラムが11より多いと発生する可能性が出てくる。
対処
InnoDBの最大行長8000バイトの壁は、innodb_file_format を Antelope から別のものに変更すればいいらしいが、my.cnf の設定をいじる必要がある。しかし、さくらの共用サーバープランではいじれないので諦める。
不要なカラムを削除して対応した。
