我正在测试用QT编写的处理保存在数据库中的PDF的应用程序,我无法尝试保存大于1Mb的任何应用程序崩溃的内容,在Goggle上读取最终更改MAX_ALLOWED_PACKET并让我救了blob。
我绘制了几个不同大小的PDF上传,我得到了大约200Kb /秒的保存文件。然后我惊讶地发现,检查数据库我发现任何超过5Mb的东西都不会存储。没有错误,似乎应用程序和MySQL之间的握手没问题,因为我没有收到任何错误。
我对MySQL和Oracle有一些经验,但我从未处理过Blob。 我在某个帖子上读到我应该尝试更改innodb_log_file_size的值(我试过2000000000),但MySQL告诉我它是一个只读变量。有些人可以帮我解决这个问题吗?我在Ubuntu上运行MySQL。
答案 0 :(得分:1)
您收到错误并不奇怪,因为默认的innodb日志文件大小为48MB(50331648字节)。
您的innodb日志文件大小必须至少是您尝试保存的最大blob大小的10倍。换句话说,只有当blob不大于日志文件大小的1/10时,才能保存blob。这开始在MySQL 5.6中实施;在此之前,它是在手册中推荐的,但没有强制执行。
您可以更改日志文件大小,但需要重新启动MySQL服务器。这些步骤记录在此处:https://dev.mysql.com/doc/refman/5.7/en/innodb-data-log-reconfiguration.html
P.S。至于关于在数据库中存储图像而不是在磁盘上存储文件的注释,这是一个长期争论。有些人会明确表示将图像存储在数据库中是不好的,但论证的两边都有利弊。请参阅我对Should I use MySQL blob field type?
的回答答案 1 :(得分:0)
同时,除非你有一个非常新的MySQL,否则更改$current_item = 273;
$newPostKey = (get_post_status($current_item)) ? 'ID' : 'import_id';
$my_post = array(
$newPostKey => $current_item,
'post_title' => 'This is the post title.',
'post_content' => 'This is the updated content.',
);
$post_id = wp_update_post( $my_post, true );
是一件痛苦的事。
如果你达到1GB,你将达到innodb_log_file_size
的限制。即使你已经过了那么,你也会达到另一个硬限制--4GB,最大尺寸为max_allowed_packet
或LONGBLOB
。
我建议你硬着头皮
计划A:将文档放入文件系统或
计划B:将文档分块,存储到多个LONGTEXT
行。这将避免所有限制,即使是4GB限制。但是代码在输入和输出上会很混乱。