次の問題に直面しています。
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;
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を再起動します。
あなたのコメント
絶望の中で、昨日はすべてのブロブ列を消去しました。 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を元のテーブルにリンクします。
私はダンプファイルをロードしようとしていて、これに遭遇しました。 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
は存在します。
ローカルで一部のデータが欠落している可能性がありますが、少なくともロード済みなので、リファクタリングの可能性があります。