MySQL创建表时提示“Row size too large”的解决方法

在Mysql创建表时,突然报出如下错误,导致无法继续:

ERROR 1118 (42000) at line 72: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs

修改数据库引擎

原因是Mysql默认数据库引擎是InnoDB,其innodb_file_format为barracuda,这种格式无法创建大表,因此需要将ENGINE改为MyISAM,可以修改my.cnf配置默认引擎,如下:

default-storage-engine=MyISAM

也可以在创建表时修改引擎方式(推荐),如下:

CREATE TABLE table_name_1 (
...
) ENGINE=MyISAM;

CREATE TABLE table_name_2 (
...
) ENGINE=InnoDB;

注意:MyISAM不支持事务处理,比如不能处理外键事务。

合理设置字段类型和长度

字段长度尽量设置合理,尤其是Varchar类型,有人认为该类型是按实际内容存储,设置再大也不浪费存储空间,这个说法没错,但是忽略了一点——值超出实际需求会浪费内存,还不如改用Text类型。

合理设置字段类型和长度对本文所述问题有什么帮助呢?这就要看表的大小了,如果表长度正好超出100字节,那么将Varchar(256)改为Varchar(128)就正好能解决问题。

修改行格式

创建表时添加如下参数:

ROW_FORMAT=DYNAMIC    #优点是节省空间

# 以下是其他参数项及说明
ROW_FORMAT=FIXED      #优点是读取速度快
ROW_FORMAT=COMPRESSED #只能通过MyISAM创建且为只读

以上三种方法,请根据实际情况选择。

原创文章禁止转载:技术学堂 » MySQL创建表时提示“Row size too large”的解决方法

精彩评论

4+7=

感谢您的支持与鼓励

支付宝扫一扫打赏

微信扫一扫打赏