12

以下のクエリを MySQL で実行しようとしていますが、毎回 SQL エラー 1406 Data too long for column エラーが発生します。列のデータ型は longtext です。何か案は?

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 コメントを削除したところ、うまくいきました。

4

3 に答える 3

6

別の列でエラーが発生する明らかな可能性は別として(エラーメッセージには正確な列が記載されていないようですが、これは奇妙です)、LONGTEXTについてマニュアルに記載されていることは次のとおりです。

最大長が 4,294,967,295 または 4GB (232 – 1) 文字の TEXT 列。値にマルチバイト文字が含まれている場合、有効な最大長は短くなります。LONGTEXT 列の有効な最大長は、クライアント/サーバー プロトコルで構成されている最大パケット サイズと使用可能なメモリによっても異なります。各 LONGTEXT 値は、値のバイト数を示す 4 バイト長のプレフィックスを使用して格納されます。

次のクエリで最大パケット サイズを確認できます。

SELECT @@max_allowed_packet

たまたま小さな値である場合は、詳細についてこの関連する回答を参照してください。

于 2012-01-16T11:29:16.987 に答える
2

列のデータ型に問題があるはずです。

(更新を介して) 挿入する文字列は 1,875 で、ロングテキストの限界にはほど遠いです。

挿入文字列のこの「pour l''Europe et l''Afrique」を見てください。問題が発生している可能性があります。「'」文字を使用せずにデータを挿入してみてください。

1,875 文字の文字列、おそらく「aaaaaaa....」を挿入してみてください。これにより、挿入する文字列の内容に関する問題が除外されます。

于 2012-01-16T10:46:22.580 に答える
2

コンテンツを varchar タイプとしてファイルしたと思います。ただし、長いテキストを保存するには、それをtextタイプにします。このタイプは長さを必要としません

于 2012-01-16T10:46:24.917 に答える