报错信息
今天在使用mysql建表时报错:1118 - Row size too large. The maximum row size for the used table bype, not counting Bl0Bs, is 65535. This indudes storage overhead, check the manua. You have to change some columns to TEXT or BLOBs。
大概意思就是建表时的varchar字段太多或者太大了,导致超过了最大的 65535 限制,所以报错了。
模拟报错情况
CREATE TABLE tb_test (
row1 VARCHAR ( 10000 ) DEFAULT NULL,
row2 VARCHAR ( 10000 ) DEFAULT NULL,
row3 VARCHAR ( 10000 ) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
> 1118 - Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
解决方法
方法一
将varchar字段的长度改小。
CREATE TABLE tb_test (
row1 VARCHAR ( 5000 ) DEFAULT NULL,
row2 VARCHAR ( 5000 ) DEFAULT NULL,
row3 VARCHAR ( 5000 ) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
方法二
将过长的varchar类型字段改为text
CREATE TABLE tb_test(
row1 VARCHAR ( 10000 ) DEFAULT NULL,
row2 text DEFAULT NULL,
row3 VARCHAR ( 10000 ) DEFAULT NULL
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4
方法三
如果是数据库表字段过多导致报错的情况,建议可以考虑垂直分表。
参考文章:
行大小不能超过 65535 问题