Innodb row size limitation

  • 行データはすべてのカラムを 8KB に収めなければならない。
  • ただし上記計算において、可変長項目は定義長に関係なく最大長を 768 バイトとする。
  • 可変長項目のうち 768 バイトを超えた部分は off-page storage へ格納される。
  • off-page strage を含めた row の最大長は 65535 である。

よって可変長が 101 項目あり、100 項目に 80 バイト、 1 項目に 1 バイト入っていたとすると、 合計 8001 バイトで 上記制約(8000バイト以内)に反するからエラーとなる。

いっぽう同じ 8001 バイトでも、可変長が 2 項目あって 1 項目に 8000 バイト、1 項目に 1 バイト 入っていたとすると合計 769 バイト(768+1)だから、エラーにならない。

参考:

Innodb row size limitation - MySQL Performance Blog
MySQL :: MySQL 5.1 リファレンスマニュアル :: 13.5.16 InnoDB テーブル上の制約