mySQL 「#1118 - Row size too large (> 8126).」ってエラーがでてきた

エクスポートしたsqlをインポートしようとしたら「#1118 - Row size too large (> 8126).」とでてきた

作成日:2023-04-10, 更新日:2023-04-10

経緯

▼かなり前に作ったものを別の環境に移すってコトでSQLをエクスポートして新しい環境にインポートしようとしたら、出てきたエラー

#1118 - 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.

英文が得意、エラーに慣れまくっている人なら読めば分かる
そうじゃないならGoogleにエラー文を投げて検索、その後、改めて英文を読む…と「おぉー、なるほど」って感じになる

エラーの内容

調べたら単純に「1レコードのTEXT型が多すぎる」ってコトらしい

▼解決方法

  • カラムを減らす
  • テーブルのformatを書換え

カラムを減らす

手っ取り早いやり方だし、今後のことを考えると望ましいやりかた
でも、運用中のサービスに適用させるには危険

テーブルのformatを書換え

「ROW_FORMAT=xxxx」ってのを設定すれば良いらしい

エラーメッセージにも記載されているけど、「ROW_FORMAT=DYNAMIC」「ROW_FORMAT=COMPRESSED」のどっちかを設定
どっちでもいいらしいが、よく分からん
→何も考えずに「DYNAMIC」のほうで試したらいけたので、深くは気にしない

テーブルを新規作成するとき、create-table文で設定

create table ~テーブル名~
(
  ~各カラムの設定~
) ROW_FORMAT=DYNAMIC

既存テーブルに対して、alter-table文で設定

alter table ~テーブル名~ ROW_FORMAT=DYNAMIC;