或者通过示例,max_allowed_packet
需要执行以下查询?请不要只给我价值,但要解释你是如何决定的。谢谢
$stmt=$pdo->prepare('INSERT INTO t(c1,c2,c3) VALUES(?,?,?)');
$stmt->execute([9876543210,9876543210,9876543210]);
EDIT。或者这个怎么样:
$sql='INSERT INTO t(pk,c1,c2) VALUES(?,?,?), (?,?,?), (?,?,?)
ON DUPLICATE KEY UPDATE c1=VALUES(c1),c2=VALUES(c2)';
$stmt=$pdo->prepare($sql);
$stmt->execute([1,111,111,2,222,222,3,333,333]);
答案 0 :(得分:1)
要计算max_allowed_packet
大小,请取最大blob列的字节长度并乘以11。有关详细信息,请see this post.
在您的示例中,虽然您有一个冗长的查询而不是大量的blob数据。根据我的经验,乘以11指南仍然可行,但它不是调整价值的最佳方式。
如上所述,证据是调整此值的最佳方法。我会将max_allowed_packet
设置为任意巨大的值,例如1G
。 (我相信MySQL支持的最大值。)然后,在正常操作中运行您的软件。如果您没有收到PACKET_TOO_LARGE
错误,请将值减半,然后重试。重复,直到你溢出限制然后加倍。这将代表您特定需求的合理上限,并有足够的增长空间。