2012-01-16 14 views
6

Próbuję wykonać zapytanie poniżej w MySQL, ale otrzymuję błąd SQL 1406 Data zbyt długo dla błędu kolumny za każdym razem. Typ danych kolumny to longtext. Jakieś pomysły?Błąd SQL 1406 Dane zbyt długie dla kolumny

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; 

Dzięki, oto wynik z 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 | 

prostu próbowałem to krótszy kwerendę, która zawiera żadnego specjalnego/uciekł znaki, ale nadal pojawia się błąd.

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; 

[Zrobione] dzięki za pomoc wszystkim, ja usunięte komentarze HTML i to działało.

+3

Czy mógłbyś wkleić wynik 'POKAŻ CREATE TABLE my_db.my_table'? To może pomóc w rozwiązaniu problemu. – Mchl

+0

Właśnie zaktualizowałem wyżej, dzięki. –

Odpowiedz

2

Musi występować problem z typem danych kolumny.

Łańcuch, który wstawiasz (przez aktualizację), ma wartość 1875, która nie jest w pobliżu limitu długiego tekstu.

Spójrz na tę literę "pour l'Europe et l'Afrique" w twoim ciągu znaków. Może to powodować problemy, spróbuj wstawić dane bez znaku "" ".

Czy możesz spróbować wstawić ciąg 1875 znaków, być może "aaaaaa ....". to wykluczyłoby problem z zawartością wstawianego ciągu.

+0

@AnthomnyBlake ten łańcuch został pomyślnie zapisany w polu tekstowym wypełnionym – Dau

+0

dzięki za tabelę def - zaktualizowałem swoją odpowiedź, proszę spróbować. – AnthonyBlake

+0

Dzięki, właśnie uruchomiłem inne zapytanie [powyżej] i otrzymałem ten sam wynik. Tym razem ciąg znaków nie ma znaków zbiegów. –

1

Wydaje mi się, że sprawiłeś, że treść została złożona jako typ varchar. ale dla przechowywania długiego tekstu, który utworzyłeś, jest to typ text. tego typu nie wymagana żadna długość

+0

Należy zauważyć, że aktualnym typem danych jest "LONGTEXT", który ma 4GB maksymalną długość – Mchl

+0

@Mchl dzięki za aktualizację – Dau

5

Oprócz oczywistej możliwości uzyskania błędu dla innej kolumny (Twój komunikat o błędzie nie wspomina o dokładnej kolumnie, co jest dziwne), oto co instrukcja ma do powiedzenia na temat LONGTEXT :

kolumna tekst o maksymalnej długości 4294967295 lub 4 GB (232 - 1) znaków. Efektywna maksymalna długość jest mniejsza, jeśli wartość zawiera znaki wielobajtowe. Efektywna maksymalna długość kolumn LONGTEXT zależy również od skonfigurowanego maksymalnego rozmiaru pakietu w protokole klient/serwer i dostępnej pamięci. Każda wartość LONGTEXT to zapisana przy użyciu przedrostka o długości czterech bajtów, który wskazuje liczbę bajtów o wartości .

Można sprawdzić maksymalny rozmiar pakietu z tego zapytania:

SELECT @@max_allowed_packet 

Jeśli zdarza się niewielka wartość, zobacz ten related answer aby uzyskać więcej informacji.

+1

Dzięki, max_allowed_packet jest ustawiony na 1M (1048576), ale to zapytanie musi wynosić tylko około 2Kb prawo? Otrzymam zmienioną wartość i mimo to spróbuję. –

+0

Masz rację, nie powinno to być problemem w tym przypadku. –

Powiązane problemy