执行多插入查询时,我收到错误“SQLSTATE [08S01]:通信链路故障:1153 获得的数据包大于 'max_allowed_packet' 字节”。我有一个复杂的类,它组成了多插入查询,彻底检查了限制,所以这真的很奇怪,但是,我们都是人类,所以在尝试找到问题后,我刚刚捕获并记录了异常详细信息并且可以不明白发生了什么。代码(PHP 7.4、PDO、MariaDB 10.5.10):
$this->pdoInstance = sql_get_connect($this->connection);
$stmt = $this->pdoInstance->query("show variables like 'max_allowed_packet'");
$d = sql_fetch($stmt);
$stmt->closeCursor();
$this->max_size = (int) $d['Value'];
...
try {
$stmt = $this->pdoInstance->query($query);
} catch (CDbException $e) {
if (strpos($e->getMessage(), 'max_allowed_packet') !== false) {
log ([
'total_size' => strlen($query),
'max_size' => $this->max_size,
];
}
throw $e;
}
我得到的是:
total_size => 33554425
max_size => 33554432
所以我发送的查询实际上比限制少了 7 个字节。但是问题被稳定地重现了。是什么原因造成的?可能有一些标题与查询或任何东西一起发送,但我如何确定它们的大小?我在 MySQL 和 MariaDB 文档中都没有找到任何关于它的信息。