在mysql中存储二进制数据

时间:2009-07-08 15:08:44

标签: sql mysql linux blob

我在本地计算机上有一个PDF文件。我想将此文件上传到SQL数据库上的BINARY BLOB。这里提到的其他方法[Binary Data in MySQL都使用PHP。我想要一个简单干净的方法来在Linux命令行上传这个PDF文件。不幸的是,我无法访问远程文件系统,所以不能像其他地方那样只存储文件的链接......我需要将这个MySQL数据库用作这些PDF文件的虚拟文件系统..

从PhP示例中,似乎所有需要的是在使用INSERT命令之前转义斜杠?有没有一种简单的方法可以在Linux命令行上实现它?

4 个答案:

答案 0 :(得分:4)

我猜你可以使用mysql函数LOAD_FILE和一个小shellcript来做这个。

未经测试的代码如下:

#!/bin/bash

if [ -z $1 ]
then 
    echo "usage: insert.sh <filename>"
else
    SQL="INSERT INTO file_table (blob_column, filename) VALUES(LOAD_FILE('$1'), '$1')"

    echo "$SQL" > /tmp/insert.sql
   cat /tmp/insert.sql | mysql -u user -p -h localhost db
fi

你可以像这样使用它:

<prompt>./insert.sh /full/path/to/file

更好的实现,错误检查,正确的临时文件创建,转义和其他细节留给读者练习。请注意,使用LOAD_FILE()需要MySQL中的FILE权限和文件的完整路径。

答案 1 :(得分:1)

您可以使用curl浏览器提交GUI浏览器执行的相同POST。嗅探GUI浏览器发送的请求,然后用curl复制它。

答案 2 :(得分:0)

不确定这是否完全解决了我的问题,但我发现在MySQL之上实现了一个文件系统层。我想我可以用它来自动将我的PDF文件存储为BLOB ...仍然需要弄清楚如何将密钥存储到这个文件系统中的PDF文件,以便基于比&lt;更有意义的东西对PDF文件进行结构化访问。 inode,seq&gt;。

http://sourceforge.net/projects/mysqlfs/
http://www.linux.com/archive/feature/127055

答案 3 :(得分:0)

请参阅MySQL cookbook中的这篇文章,其中包括一个示例脚本:

http://www.freeopenbook.com/mysqlcookbook/mysqlckbk-CHP-17-SECT-7.html

但它有一些限制,最值得注意的是该文件必须与mysql服务器存储在同一主机上。