如何解决MySql错误:行大小太大?

如何解决MySql错误:行大小太大?,mysql,database,row,innodb,myisam,Mysql,Database,Row,Innodb,Myisam,我对mysql的行大小有一些问题。在我的数据库表中,我将图片存储在mediumblob字段(16MB)中。代码的第一个版本导致了关于行大小的错误,所以我尝试设置innodb_large_前缀,并将行格式更改为dynamic。代码如下: set global innodb_large_prefix = 1; Create table if not exists `Pictures` ( `Id` int(11) NOT NULL AUTO_INCREMENT, `Size` in

我对mysql的行大小有一些问题。在我的数据库表中,我将图片存储在mediumblob字段(16MB)中。代码的第一个版本导致了关于行大小的错误,所以我尝试设置innodb_large_前缀,并将行格式更改为dynamic。代码如下:

set global innodb_large_prefix = 1;

Create table if not exists `Pictures`
(
    `Id` int(11) NOT NULL AUTO_INCREMENT,
    `Size` int NOT NULL,
    `Type` varchar(25) NOT NULL,
    `isUserpic` tinyint DEFAULT false,
    `Likes` int(11) DEFAULT 0,           
    `Pic` mediumblob NOT NULL,          
    `Date` timestamp NOT NULL,
    `User` int(11) NOT NULL,
    PRIMARY KEY(`Id`)
)engine=InnoDb default charset=latin1 ROW_FORMAT=DYNAMIC;
当我尝试插入大于500-600 KB的pic时,我收到以下错误(与前面的错误相同):

错误:行大小太大(>8126)。将某些列更改为文本或 BLOB或使用ROW\u FORMAT=DYNAMIC或ROW\u FORMAT=COMPRESSED可能会有所帮助。在里面 当前行格式,768字节的BLOB前缀以内联方式存储

要解决此问题,我尝试使用:

    set global innodb_file_format = Barracuda;
    set global innodb_file_format_max = Barracuda;
    set global innodb_file_per_table = 1;
然后还要更改行格式:

ROW_FORMAT = COMPRESSED;
但这个解决方案不起作用,所以我将表的引擎从InnoDB更改为MyISAM:错误更改了,现在是(我尝试插入一张1.63MB的图片):

MySql服务器已经消失了

如何解决有关行大小的错误?
如果解决方案使用MYISAM作为引擎,我如何修复错误以及服务器“消失”的原因?

在MySQL 5.6上测试您的表时,我无法重现错误。我插入了一个10MB的blob,但仍然没有得到错误。如果我使用10MB的blob,我不会得到关于行大小的错误。(我用大约1MB和2MB的图片进行测试),但对于一些图片,php函数是上传的文件(我在连接html表单和数据库的php代码中使用该文件)返回null,并且没有太多图片,我得到“Mysql服务器已经消失”。所以我怀疑问题出在php代码或html表单中,因为函数是在插入查询之前上传的@BillKarwinI重新考虑了我的所有项目,我决定解决将图片保存在web服务器目录中,并在数据库中仅存储照片名称的问题。感谢@Billkarvindo的帮助,您还有
innodb\u file\u per\u table=1
?还可以检查超时。