innodb ストレージ エンジンを使用している mysql テーブルにデータを挿入しようとすると、次のエラーが発生します。
Mysqli statement execute error : Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. You have to change some columns to TEXT or BLOBs
エラーは理解できますが、私のテーブルはほとんど text 列と mediumtext 列だけで構成されています。基本的に、可変長のWebサービスからのxml応答の束を保存しようとしています。応答の挿入で上記のエラーが発生する col14 に到達するまで、これらの応答を保存できます (要求はバッチ プロセスで順次発生します)。
これを機能させることができない場合の私のバックアップのアイデアは、xmlをサーバーに保存し、ファイルの場所をデータベースに置くことです。
テーブル作成コードを含めました
CREATE TABLE IF NOT EXISTS `qb_results` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`col1` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL,
`col2` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`col3` text COLLATE utf8_unicode_ci,
`col4` text COLLATE utf8_unicode_ci,
`col5` text COLLATE utf8_unicode_ci,
`col6` text COLLATE utf8_unicode_ci,
`col7` mediumtext COLLATE utf8_unicode_ci,
`col8` mediumtext COLLATE utf8_unicode_ci,
`col9` mediumtext COLLATE utf8_unicode_ci,
`col10` mediumtext COLLATE utf8_unicode_ci,
`col11` mediumtext COLLATE utf8_unicode_ci,
`col12` mediumtext COLLATE utf8_unicode_ci,
`col13` mediumtext COLLATE utf8_unicode_ci,
`col14` mediumtext COLLATE utf8_unicode_ci,
`col15` mediumtext COLLATE utf8_unicode_ci,
`col16` mediumtext COLLATE utf8_unicode_ci,
`col17` mediumtext COLLATE utf8_unicode_ci,
`col18` mediumtext COLLATE utf8_unicode_ci,
`updated_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=61 ;
編集 - 列がビジネス固有のものであり、実際の列名を含める必要や関連性がないと感じたため、列に番号を付けるように変更しました。正規化は実際には問題を解決しますが、コンテキストが与えられたエラーをまだ説明していません (エラーは、既に使用されているテキスト列を使用することを示しています)