2012-06-14 54 views
1

我試圖將數據插入到一個MySQL表使用InnoDB存儲引擎,並正在此錯誤:mysqli的行大小太大

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 

我理解錯誤,但我的表是由幾乎只有文本和中間文本列。 基本上,我試圖從一個可變長度的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 ; 

編輯 - 更改的列進行編號,因爲他們具體的業務,並沒有覺得這是必要的或相關的,包括他們的實際列名。正常化實際上可以解決問題,但仍然沒有解釋給出的上下文錯誤(錯誤說使用文本列,它已被使用)

+0

偶數列...聞起來像正常化的候選人?這也將解決長度問題。請注意,使用utf-8會顯着增加非文本列中的已用空間。 – Wrikken

+0

編號的列?只是...不。使它成爲qb_results(id,set,data),這樣你就會有記錄而不是列。 –

+0

[保存base64數據 - 行大小過大問題]的可能重複(http://stackoverflow.com/questions/8220489/saving-base64-data-row-size-too-large-issue) – Jocelyn

回答

-2

我也有同樣的問題。執行以下操作: set ENGINE = MyISAM。 另外,如果您的腳本體積龐大,您可能需要更改腳本的執行時間。 在這種情況下,打開PHP的配置文件(php.ini中適用於Windows),並設置

max_execution_time=150 //(suppose) you can set it whatever you feel right.