您无法max_allowed_packet
在运行时直接确定客户端。当您执行show variables like "max_allowed_packet"
时,它仅显示服务器端的 max_allowed_packet 以及它在开始时读取的任何内容。似乎没有其他方法可以找到这个值。
此外,为了解决您的问题,默认情况下,来自 MySQL Docs
On the client side, max_allowed_packet has a default of 1GB.
此外,正如您已指定您正在使用MySQL C API
. 您可以使用mysql_options() API设置 max_allowed_packet 的值,如下所示:
首先创建包含内容的选项文件
[client]
max_allowed_packet=10M
假设这个文件保存为“c:/mysql.cnf”,它将客户端的 max_allowed_packet 的值设置为 10MB。现在您需要在您的连接语句之前包含以下代码行来读取此文件。
mysql_options (conn, MYSQL_READ_DEFAULT_FILE, "C:/mysql.cnf");
如果您希望将组的名称从文件更改为client
,myClient
请将“c:/mysql.cnf”设置为
[myClient]
max_allowed_packet=10M
并在您的连接语句之前使用以下代码行:
mysql_options (conn, MYSQL_READ_DEFAULT_FILE, "c:/mysql.cnf");
mysql_options (conn, MYSQL_READ_DEFAULT_GROUP, "myClient");
所以,最后你的代码看起来像这样:
MYSQL mysql;
mysql_init(&mysql);
mysql_options (conn, MYSQL_READ_DEFAULT_FILE, "c:/mysql.cnf");
mysql_options (conn, MYSQL_READ_DEFAULT_GROUP, "myClient");
if (!mysql_real_connect(&mysql,"host","user","passwd","database",0,NULL,0))
{
fprintf(stderr, "Failed to connect to database: Error: %s\n",
mysql_error(&mysql));
}
上面的代码行,会将您的 max_allowed_packet 设置为 10M,现在您可以使用查询“ show variables like "max_allowed_packet"
”读取服务器端 max_allowed_packet,并且您知道客户端 max_allowed_packet 为 10MB。
更多参考资料1
对于 MySQL 命令行客户端,MySQL 文档说
如果你使用 mysql 客户端程序,它的默认 max_allowed_packet 变量是 16MB
希望它有所帮助,并服务于您的目的....