我面临以下问题。
Run Code Online (Sandbox Code Playgroud)Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In
当前行格式,768 字节的 BLOB 前缀内联存储。
它出现在我将图像上传到数据库时(它具有 <1Mb)。准确地说,只有 100kb。
我尝试了很多事情:更改属性“max_allowed_packet”、“innodb_log_file_size”(即,将大小增加到 512M)并没有什么......
我不知道麻烦的原因。
为了说明,表
TABLE(
`passeio` int(4) unsigned NOT NULL COMMENT 'identitificador do passeio',
`data_inclusao` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`nome_passeio` varchar(200) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`inicio` date NOT NULL,
`fim` date NOT NULL,
`por_que_ir` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`pdf_roteiro` mediumblob NOT NULL,
`incluso` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`nao_incluso` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`valor_descricao` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`valor_vista` decimal(10,0) NOT NULL,
`valor_total_parcelado` decimal(10,0) NOT NULL,
`numero_parcelas` int(2) unsigned NOT NULL,
`forma_pagamento` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`avisos_importantes` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`foto_principal` blob NOT NULL,
`foto_2` blob NOT NULL,
`foto_3` blob NOT NULL,
`foto_4` blob NOT NULL,
`foto_5` blob NOT NULL,
`foto_6` blob NOT NULL,
`foto_7` blob NOT NULL,
`foto_8` blob NOT NULL,
`foto_9` blob NOT NULL,
`foto_10` blob NOT NULL,
`foto_11` blob NOT NULL,
`foto_12` blob NOT NULL,
`foto_13` blob NOT NULL,
`foto_14` blob NOT NULL,
`foto_15` blob NOT NULL,
`foto_16` blob NOT NULL,
`foto_17` blob NOT NULL,
`foto_18` blob NOT NULL,
`foto_19` blob NOT NULL,
`foto_20` mediumblob NOT NULL,
`valor_entrada` decimal(10,0) NOT NULL,
`data_partida` date NOT NULL,
`local_partida_1` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`hora_partida_1` time NOT NULL,
`local_partida_2` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`hora_partida_2` time NOT NULL,
`local_partida_3` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`hora_partida_3` time NOT NULL,
`local_partida_4` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`hora_partida_4` time NOT NULL,
`local_partida_5` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`hora_partida_5` time NOT NULL,
`local_partida_6` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`hora_partida_6` time NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=77 DEFAULT CHARSET=latin1 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;
Run Code Online (Sandbox Code Playgroud)
Rol*_*DBA 11
Bill Karwin之前在他对MySQL 的 Row size error 的回答中已经解决了这个问题
我过去也解决过这个问题:MySQL: Row size too large (> 8126)
根据他的帖子,以及您仍然有几个 TEXT 和 VARCHAR 字段的事实,您应该将以下值设置为更高my.cnf
:
[mysqld]
max_allowed_packet = 1G
innodb_log_file_size = 2G
innodb_log_buffer_size = 512M
Run Code Online (Sandbox Code Playgroud)
然后,重新启动mysqld。
你的评论
在绝望中,我昨天删除了所有的 blob 列。我只留下一个。问题消失了。但是我会再次创建它们并尝试您的方法。我尽快带着结果回来。谢谢指点
您不应将 20 BLOB 放在一张表中。您应该创建表来保存 BLOB
CREATE TABLE mi_fotos
(
id INT NOT NULL AUTO_INCREMENT,
passeio INT NOT NULL,
foto BLOB,
PRIMARY KEY (id)
) ENGINE=InnoDB;
Run Code Online (Sandbox Code Playgroud)
将您的照片存储在此表中,并将此表中的 passeio 链接回您的原始表。