MySQL5.1のDBのダンプをMySQL5.7おDBにインポートしたらSQL エラー (1118): Row size too large (> 8126)が発生した。
特定のテーブルでこのエラーが発生しており、このテーブルではvarcharで定義された項目が400程度もある。
InnoDBではレコードサイズが8192を超えてはだめらしい。
MySQL5.1ではチェックが甘いためか?
このSQLが通っていたがMySQL5.7ではそれがだめになったようだ。
根本的な解決策はQiitaを参照するとして、
今回はとりあえずエラーを回避するためにエラーチェックを緩くする。
確認のために以下のSQLを実行するとエラーが発生。
[code]
create table TESTSIZE
(
FLD01 varchar(12),
FLD02 varchar(12),
省略
FLD298 varchar(12),
FLD299 varchar(12),
FLD300 varchar(12)
)ENGINE=InnoDB
[/code]
その後、以下のコマンドで環境変数を変更してSQLを実行すると警告は表示されるが無事にテーブルは作成される。
[code]
set innodb_strict_mode=0;
[/code]
恒久的な処置としてはmy.cnfに以下を追加
[code]
innodb_strict_mode = 0
[/code]
MySQLを再起動して対応
こちらも参考にさせていただきました
teratail