如何在 MySQL 数据库中插入文件?

Posted

技术标签:

【中文标题】如何在 MySQL 数据库中插入文件?【英文标题】:How to insert a file in MySQL database? 【发布时间】:2011-05-11 03:53:45 【问题描述】:

我想使用 web 服务在远程 web 服务器上的 mysql 数据库中插入一个文件。

我的问题是:什么类型的表列(例如 varchar 等)将存储文件?如果是文件,插入语句会有所不同吗?

【问题讨论】:

【参考方案1】:

BLOB 数据类型最适合存储文件。

见:How to store .pdf files into MySQL as BLOBs using php? MySQL BLOB reference manual 有一些有趣的 cmets

【讨论】:

mysql中有几种BLOB类型,查看***.com/a/43514588/1737158【参考方案2】:

MySQL 类型的文件大小:

TINYBLOB 255 字节 = 0.000255 Mb BLOB 65535 字节 = 0.0655 Mb MEDIUMBLOB 16777215 字节 = 16.78 Mb LONGBLOB 4294967295 字节 = 4294.97 Mb = 4.295 Gb

然而,在大多数情况下,我不建议在数据库中存储大块字节,即使它支持它,因为它会增加整体数据库大小并可能导致真正的性能问题。您可以阅读有关主题 here 的更多信息。许多关心一致性性能的数据库甚至不会让你做这样的事情。就像例如众所周知,AWS DynamoDB 在任何规模上都表现出色,它将单个项目记录限制为 400KB。 MongoDB 确实允许 16MB,这也已经太多了,imo。如果您愿意,MySQL 允许所有 4GB。但同样,在这样做之前要三思而后行。您可能可以使用这些列类型存储大量数据的情况是 - 您的流量数据库很小,并且您只想将所有内容保存在一个地方以加快开发速度。就像小公司的内部系统。

【讨论】:

【参考方案3】:

其他答案会让您很好地了解如何完成您所要求的......

然而

在很多情况下这是一个好主意。通常最好只存储数据库中的文件名和文件系统中的文件。

这样您的数据库会更小,可以更轻松地传输,更重要的是可以更快地备份/恢复。

【讨论】:

我完全同意这一点。文件系统是为存储和提供文件而构建的——它们在这方面非常擅长。但是,Blob 始终存在,以防它使您的工作更轻松。我可以看到一些托管设置,其中将文件干扰到数据库中可以节省时间、精力,甚至可能有助于提高速度。 @hamlin11 如果只有几个文件,您是正确的。如果是为了某种文件存储区域,那么这样做将是一个很大的禁忌。 但是,如果您想要完整性,那么无论如何您都必须同时备份图像,这是您唯一的优点。使用其中一种并没有真正的优势。【参考方案4】:

你需要使用BLOB,有TINY、MEDIUM、LONG,只有BLOB,和其他类型一样,根据你的尺寸需要选择一个。

TINYBLOB 255
BLOB 65535
MEDIUMBLOB 16777215
LONGBLOB 4294967295
(in bytes)

插入语句将是相当正常的。您需要使用fread 读取文件,然后使用addslashes 读取文件。

【讨论】:

感谢您的回复。所以当我创建插入语句时,我只需在插入的值部分输入“abc.pdf”?还是我需要做其他事情? 哦不,你插入内容,这就是你用 fread 阅读的内容。 再次感谢您的快速回复。那么,您能否给我看一个示例插入语句,它的外观如何? hamlin11 发布的链接(PHP 示例)显示了文件读取和插入语句的示例。 addslashes ??我敢打赌,在所有带有 mysql 驱动程序的重要语言中,都支持准备好的语句(这很可能更安全)......

以上是关于如何在 MySQL 数据库中插入文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Hibernate、MySQL 应用程序中使用 import.sql 文件将默认数据插入表中

如何使用 CSV(平面文件)更新 MySQL 数据库并在插入前验证数据

如何在mysql 5中记录特定表的插入/更新查询

如何解决mysql enum 类型字段的插入问题

如何在netbeans java中将图像插入mysql数据库

如果行不存在具有相同的值,如何在 Mysql 中插入行