- 在使用 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 的一行數據。