max_allowed_packet与longblob限制

Posted _雪辉_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了max_allowed_packet与longblob限制相关的知识,希望对你有一定的参考价值。

一、longblob

  最大长度为4294967295或4GB− 1字节的blob列。LONGBLOB列的有效最大长度取决于客户机/服务器协议中配置的最大数据包大小和可用内存。每个LONGBLOB值都使用一个4字节长度的前缀来存储,该前缀指示值中的字节数。

二、max_allowed_packet

  max_allowed_packet参数用来控制一个数据包或任何生成/中间字符串的最大大小,或 mysql_stmt_send_long_data() C API函数发送的任何参数。默认值为64MB,最大1G。
  数据包消息缓冲区被初始化为net_buffer_length字节,但在需要时可以增长到max_allowed_packet字节。默认情况下,此值很小,用于捕获大的数据包。
  如果使用大BLOB列或长字符串,则必须增加此值。它应该和使用的最大的BLOB一样大。允许的最大数据包的协议限制为1GB。值应该是1024的倍数;非倍数向下舍入为最接近的倍数。
  当通过更改max_allowed_packet变量的值来更改消息缓冲区大小时,如果您的客户端程序允许,您还应该更改客户端的缓冲区大小。客户端库中内置的默认最大允许数据包值为1GB,但个别客户端程序可能会覆盖该值。例如,mysql和mysqldump的默认值分别为16MB和24MB。它们还使您能够通过在命令行或选项文件中设置max_allowed_ packet来更改客户端值。

三、max_allowed_packet最大1G、longblob却可以存4G?

  这个问题唯一的方法是将上传的blob分割成块,这些块等于或小于允许的最大数据包大小。通过多次调用MySQL C API函数MySQL_stmt_send_long_data()上传。https://dev.mysql.com/doc/c-api/8.0/en/mysql-stmt-send-long-data.html

以上是关于max_allowed_packet与longblob限制的主要内容,如果未能解决你的问题,请参考以下文章

设置mysql max_allowed_packet

修改mysql max_allowed_packet 配置

mysql max_allowed_packet设置及问题

sqlsever 转mysql 出错 MySQL max_allowed_packet设置及问题

mysql的max_allowed_packet配置

MySQL max_allowed_packet设置及问题