web-dev-qa-db-ja.com

行サイズが大きすぎます(> 8126)

次の問題に直面しています。

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_pa​​cket」、「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;    

Bill Karwin は以前、これに対する彼の回答 MySQLでの行サイズエラー に対処しています。

私も過去にこれに対処しました: MySQL:行サイズが大きすぎます(> 8126)

彼の投稿と、いくつかのTEXTおよびVARCHARフィールドがまだあるという事実に基づいて、my.cnfで次の値を高く設定する必要があります。

[mysqld]
max_allowed_packet = 1G
innodb_log_file_size = 2G
innodb_log_buffer_size = 512M

次に、mysqldを再起動します。

更新2015-01-26 23:15 EST

あなたのコメント

絶望の中で、昨日はすべてのブロブ列を消去しました。 1つだけ残しました。問題は消えた。しかし、私はそれらを再び作成し、あなたのアプローチを試みます。できるだけ早く結果を返します。ご指摘ありがとうございます

1つのテーブルに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を元のテーブルにリンクします。

9
RolandoMySQLDBA

私はダンプファイルをロードしようとしていて、これに遭遇しました。 CREATE TABLEステートメントで失敗しました。

設定することで、少なくともCREATE TABLEステートメントを実行することができました

innodb_strict_mode = 0

これにより、このエラーが警告に変わります。ダンプのロード中にこのエラーが2回繰り返されましたが、テーブルはすべてのフィールドで作成されました:

[Warning] InnoDB: Cannot add field `field_GF20140210120838544997000000` in table `mydb`.`mytable` because after adding it, the row size is 7391 which is greater than maximum allowed size (7372) for a record on index leaf page.

警告とは逆に、フィールドfield_GF20140210120838544997000000は存在します。

ローカルで一部のデータが欠落している可能性がありますが、少なくともロード済みなので、リファクタリングの可能性があります。

1
Greg