MYSQL - 尽管 max_allowed_pa​​cket 为 1GB,但使用 4GB 的 longblob

MYSQL - 尽管 max_allowed_pa​​cket 为 1GB,但使用 4GB 的 longblob

最近,我收到一个使用 MySQL 5.6 的旧应用程序,它在处理大文件时存在问题。

我发现很多帖子都说 max_allowed_pa​​cket 不能设置为超过 1GB,因为这是 MySQL 定义的限制。但是有一种数据类型 LONGBLOB 被定义为支持最大 4GB 的大小。

我无法想象,他们定义了一种你无法使用的数据类型——尽管max_allowed_pa​​cket是1GB,怎么可能保存这种大小的Blob呢?

答案1

唯一的方法是将要上传的 blob 拆分为大小相等或更小的块max_allowed_packet。它们通过多次调用 MySQL C API 函数进行上传mysql_stmt_send_long_data()(qv)。MySQL 命令行客户端应该会为您处理这个问题。在您自己的代码中,您可能需要检查您首选语言的 API 是否处理这个问题,或者您是否必须自己处理这个问题。

答案2

有很多的实际的不尝试使用全部 4GB 的原因。

  • 执行查询需要很长时间。* 慢
  • 如果明天的 blob 长度为 5GB 怎么办?
  • 它会阻塞复制。
  • 对于图像/视频之类的东西,最好将 blob 放在文件中,然后让 html 通过<img...>(等)处理它。
  • 杂乱的 RAM(可能更适合用于缓存等)

无论如何,您只是损失了 1G 和 4G 之间的范围。16M..1G 可以工作;小于 16M 也可以工作(以及MEDIUMBLOB等)。

相关内容