MySQL:在运行时为客户端确定max_allowed_pa​​cket的值

Law*_*nti 2 mysql configuration mysql-connector

考虑这种情况:

-- Server: max_allowed_packet = 200MB 
-- Client: max_allowed_packet = 4MB

-- The following will return 200MB
SHOW variables like 'max_allowed_packet';
Run Code Online (Sandbox Code Playgroud)

在不读取配置文件的情况下,是否可以为客户端确定max_allowed_pa​​cket的值?我正在使用MySQL C API.

基本上,我希望我的应用程序有类似的东西:

 max_allowed_packet = min(max_allowed_packet_server, max_allowed_packet_client)
Run Code Online (Sandbox Code Playgroud)

jsi*_*ist 7

您无法max_allowed_packet在运行时直接确定客户端.执行时show variables like "max_allowed_packet",它仅显示服务器端的max_allowed_pa​​cket以及它在启动时读取的内容.似乎没有其他方法可以找到这个价值.

此外,要解决您的问题,默认情况下,从MySQL Docs

On the client side, max_allowed_packet has a default of 1GB.
Run Code Online (Sandbox Code Playgroud)

此外,正如您所指定的那样MySQL C API.您可以使用mysql_options() API 设置max_allowed_pa​​cket的值,如下所示:

首先使用内容创建您的选项文件

[client]
max_allowed_packet=10M
Run Code Online (Sandbox Code Playgroud)

假设此文件保存为"c:/mysql.cnf",它将客户端的max_allowed_pa​​cket值设置为10MB.现在您需要在connect语句之前包含以下代码行来读取此文件.

mysql_options (conn, MYSQL_READ_DEFAULT_FILE, "C:/mysql.cnf");
Run Code Online (Sandbox Code Playgroud)

如果你想将组的名称从in 更改clientmyClientin,请将你的"c:/mysql.cnf"改为

[myClient]
max_allowed_packet=10M
Run Code Online (Sandbox Code Playgroud)

并在连接语句之前使用以下代码行:

mysql_options (conn, MYSQL_READ_DEFAULT_FILE, "c:/mysql.cnf");
mysql_options (conn, MYSQL_READ_DEFAULT_GROUP, "myClient");
Run Code Online (Sandbox Code Playgroud)

所以,最后你的代码看起来像这样:

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));
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码行中,将max_allowed_pa​​cket设置为10M,现在您可以使用查询" show variables like "max_allowed_packet"" 读取服务器端max_allowed_pa​​cket,并且您知道您的客户端max_allowed_pa​​cket为10MB.

进一步参考1

对于MySQL Commandline客户端,MySQL文档

如果您使用的是mysql客户端程序,则其默认的max_allowed_pa​​cket变量为16MB

希望它有所帮助,并为您的目的服务....