我面临以下问题。
sql 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 前缀被内联存储。
sql 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;
根据他的帖子,以及您仍然有多个 TEXT 和 VARCHAR 字段的事实,您应该将以下值设置得更高my.cnf:
my.cnf
[mysqld] max_allowed_packet = 1G innodb_log_file_size = 2G innodb_log_buffer_size = 512M
然后,重新启动 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;
将您的照片存储在此表中,并将此表中的 passeio 链接回您的原始表。