1

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 ;

編集 - 列がビジネス固有のものであり、実際の列名を含める必要や関連性がないと感じたため、列に番号を付けるように変更しました。正規化は実際には問題を解決しますが、コンテキストが与えられたエラーをまだ説明していません (エラーは、既に使用されているテキスト列を使用することを示しています)

4

1 に答える 1

-2

私も同じ問題を抱えていました。以下を実行します: ENGINE=MyISAM を設定します。また、スクリプトがかさばる場合は、スクリプトの実行時間を変更することをお勧めします。その場合はPHPの設定ファイル(Windowsならphp.ini)を開いて設定

max_execution_time=150 //(suppose) you can set it whatever you feel right.
于 2013-07-09T09:50:45.270 に答える