error: Got a packet bigger than ‘max_allowed_packet’ bytes

  • 在使用 longtext 類型執行數據錄入時,有時會拋出這個異常,
    從字面理解就是當前包大小超過 mysql 系統設置的包大小無法執行操作。
  • 解釋一下包大小這個東西:簡單來說就是mysql把當前執行的mysql語句看作是一個包,
    而對這個包大小的限制即是對當前mysql語句長度的限制。
  • 解決辦法:
         (1)Linux 下:
進入服務器路徑 /etc 找到 my.cnf 在裏面的 mysqld 段中
找到 max_allowed_packet = 大小
修改到適當大小並保存,然後重新啓動 mysql 服務器,即可。如果沒有這行就增加這行。
(2)Windows下:
進入到mysql安裝路徑下,找到 my.ini 文件,在[mysqld]部分(不在這部分沒用)添加一句:
set-variable=max_allowed_packet=大小。保存後重新起動mysql服務。

順便說一下:那個大小的設置在 linux 下可以直接寫 10M、20000K之類的
但是在windows下就只能換算成byte.
  • 修改後我就可以執行操作了
	string aa;
for (int i=0; i<1024*1024*3; i++)
{
aa += "a";
}
Query query = con.query();
query << "insert into btest values ('" + aa + "')";

cout << "Query: " << query.preview() << endl;
query.execute();
OK,成功,可以在 btest 表中查到長度爲 1024*1024*3 byte 的一行數據。 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章