2012-01-16 81 views
6

我想在MySQL中執行下面的查詢,但得到SQL錯誤1406數據太長,每次列錯誤。列數據類型是longtext。有任何想法嗎?SQL錯誤1406數據太長的列

UPDATE `my_db`.`my_table` SET `content` = '<div id="primaryContent"><div id="offices_map"></div><!-- #offices_map --><div id="offices_mapControlPanel" class="cf"><ul id="offices_continentLinkList"><li><a href="#" rel="Africa">AFRIQUE</a></li><li><a href="#" rel="Asia">ASIE</a></li><li><a href="#" rel="Australasia">AUSTRALASIE</a></li><li><a href="#" rel="Europe" id="offices_europeLink" class="current">EUROPE</a></li><li><a href="#" rel="NorthAmerica">AMERIQUE DU NORD</a></li><li class="last"><a href="#" rel="SouthAmerica">AMERIQUE DU SUD</a></li></ul><ul id="offices_mapLegend"><li id="offices_mapLegendRedPointer">Bureaux Panavision</li><li id="offices_mapLegendYellowPointer">Agents Panavision</li></ul></div><!-- #offices_mapLegend --><div id="offices_ownedOfficesContactDetails" class="cf"><h2>Bureaux Panavision</h2><ul class="cf"><li class="first"><strong>Panavision Greenford</strong> - pour l''Europe et l''Afrique - <a href="#" id="offices_linkPanavisionGreenford">D&#233;tails</a></li><li>Panavision Prague - <a href="#" id="offices_linkPanavisionPrague">D&#233;tails</a></li><li>Panavision Manchester - <a href="#" id="offices_linkPanavisionManchester">D&#233;tails</a></li><li>Panavision Alga &amp; Cinecam - <a href="#" id="offices_linkPanavisionAlga">D&#233;tails</a></li><li>Panavision Rh&ocirc;ne-Alpes - <a href="#" id="offices_linkPanavisionRhoneAlpes">D&#233;tails</a></li><li>Panavision Marseille - <a href="#" id="offices_linkPanavisionMarseille">D&#233;tails</a></li><li>Panavision Pologne - <a href="#" id="offices_linkPanavisionPoland">D&#233;tails</a></li><li>Panavision Dublin - <a href="#" id="offices_linkPanavisionDublin">D&#233;tails</a></li><li>Panavision Belgique - <a href="#" id="offices_linkPanavisionBelgium">D&#233;tails</a></li></ul></div><!-- #offices_ownedOfficesContactDetails --></div><!-- #offices_mapControlPanel --><div class="cf"></div>' WHERE `my_table`.`id` = 27; 

謝謝,這裏是從SHOW結果CREATE TABLE

CREATE TABLE `my_table` ( 
    `content` longtext NOT NULL, 
    `cat` text NOT NULL, 
    `starter` int(1) NOT NULL, 
    `at` int(11) DEFAULT '0', 
    `table` varchar(60) DEFAULT NULL, 
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM AUTO_INCREMENT=84 DEFAULT CHARSET=latin1 | 

剛試過不包含特殊這種較短的查詢/轉義字符無效,但我仍然得到錯誤。

UPDATE `my_db`.`my_table` SET `contenu` = '<div id="primaryContent"><div id="offices_map"></div><!-- #offices_map --><div id="offices_mapControlPanel" class="cf"><ul id="offices_continentLinkList"><li><a href="#" rel="Africa">AFRIQUE</a></li><li><a href="#" rel="Asia">ASIE</a></li><li><a href="#" rel="Australasia">AUSTRALASIE</a></li><li><a href="#" rel="Europe" id="offices_europeLink" class="current">EUROPE</a></li><li><a href="#" rel="NorthAmerica">AMERIQUE DU NORD</a></li><li class="last"><a href="#" rel="SouthAmerica">AMERIQUE DU SUD</a></li></ul><ul id="offices_mapLegend"><li id="offices_mapLegendRedPointer">Bureaux Panavision</li><li id="offices_mapLegendYellowPointer">Agents Panavision</li></ul></div><!-- #offices_mapLegend -->' WHERE `my_table`.`id` = 27; 

[解決] 感謝您的幫助大家,我刪除了HTML註釋和它的工作。

+3

你介意粘貼'SHOW CREATE TABLE my_db.my_table'的結果嗎?這可能有助於解決問題。 – Mchl 2012-01-16 10:40:24

+0

剛剛更新上面,謝謝。 – 2012-01-16 10:56:38

回答

2

列數據類型必須存在問題。

你插入的字符串(通過更新)是1,875,這遠不是longtext的限制。

看看這個「在你的插入字符串中注入歐洲和非洲」。它可能會導致您遇到問題,嘗試插入不帶「」「字符的數據。

你能否嘗試插入1,875個字符的字符串,或許是「aaaaaaa ....」。這將排除您插入的字符串內容的問題。

+0

@AnthomnyBlake這個字符串成功保存在文本類型字段 – Dau 2012-01-16 10:53:54

+0

感謝您的表def - 我已經更新了我的答案,請試試 – AnthonyBlake 2012-01-16 11:12:48

+0

謝謝,我剛剛運行另一個查詢[上],並得到了相同的結果。這次字符串沒有轉義的字符。 – 2012-01-16 11:29:48

1

我認爲你把內容歸檔爲varchar類型。但爲了存儲長文本,您已將其設置爲text類型。這種類型不需要任何長度

+0

請注意,當前的數據類型是'LONGTEXT',它有一個4GB的最大長度 – Mchl 2012-01-16 10:49:12

+0

@Mchl感謝您的更新 – Dau 2012-01-16 10:53:00

5

除了明顯的可能性爲不同的列獲取錯誤(您的錯誤消息似乎沒有提及確切的列,這很奇怪),這裏是手冊必須說的關於LONGTEXT

最大長度爲4,294,967,295或4GB(232 - 1) 個字符的TEXT列。如果該值包含 多字節字符,則有效最大長度會減少。 LONGTEXT 列的有效最大長度還取決於 客戶端/服務器協議和可用內存中配置的最大數據包大小。每個LONGTEXT值是 ,使用四字節長度前綴存儲,該前綴指示值中的 字節的數量。

您可以驗證最大數據包大小與此查詢:

SELECT @@max_allowed_packet 

如果碰巧是一個很小的值,請參閱本related answer進一步的信息。

+1

謝謝,max_allowed_pa​​cket設置爲1M(1048576),但這個查詢只能達到約2Kb?無論如何,我會改變這個值並試一試。 – 2012-01-16 11:39:08

+0

你說得對,在這種情況下不應該是個問題。 – 2012-01-16 11:39:56