MySQL的sql语句大小限制max_allowed_packet,这是一个关键参数,影响着数据包和字符串的最大大小,以及通过mysql_stmt_send_long_data() C API函数发送的参数。默认大小是4MB。数据包消息缓冲区初始配置为net_buffer_length字节,但当需要时,可以扩展至max_allowed_packet字节。默认值较小,目的是捕捉并...
MySQL-sql语句大小限制max_allowed_packet
MySQL的sql语句大小限制max_allowed_packet,这是一个关键参数,影响着数据包和字符串的最大大小,以及通过mysql_stmt_send_long_data() C API函数发送的参数。默认大小是4MB。
数据包消息缓冲区初始配置为net_buffer_length字节,但当需要时,可以扩展至max_allowed_packet字节。默认值较小,目的是捕捉并阻止可能的大(错误)数据包。
若使用大型BLOB列或长字符串,必须增加max_allowed_packet的值。此值应等于您希望使用的最大BLOB。最大限制为1GB,且值应为1024的倍数。非倍数值会被向下舍入至最近的倍数。
在修改max_allowed_packet变量时,如果客户端程序允许,还应调整客户端的缓冲区大小。内置到客户端库的默认max_allowed_packet值为1GB,但特定客户端程序可能有其他默认值,如mysql的16MB和mysqldump的24MB。这些程序允许通过命令行或选项文件改变客户端值。
session值的max_allowed_packet变量是只读的,客户端接收的最大字节数不会超过此值。然而,服务器向客户端发送的字节数不能超过当前全局max_allowed_packet值。如果全局值在客户端连接后被更改,那么全局值可能小于session值。
每个客户端线程与连接缓冲区和结果缓冲区相关联,两者初始大小为net_buffer_length字节,根据需要动态扩展至max_allowed_packet字节。结果缓冲区在每条SQL语句后收缩至net_buffer_length。
通常不应修改此变量,除非内存非常有限,此时可将其设置为预期的客户端发送语句长度。如果语句超过此长度,连接缓冲区将自动扩大。net_buffer_length的设置最大值为1MB。
max_allowed_packet的session值是只读的。
参考资料
dev.mysql.com/doc/refman/
dev.mysql.com/doc/refman/2024-10-27