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;