在mysql中存储二进制数据

在mysql中存储二进制数据,sql,mysql,linux,blob,Sql,Mysql,Linux,Blob,我在本地机器上有一个PDF文件。我想将此文件上载到SQL数据库上的二进制BLOB中。这里提到的其他方法[都使用PHP。我想用一种简单干净的方法在Linux命令行上上传这个PDF文件。不幸的是,我没有访问远程文件系统的权限,所以不能像其他地方提到的那样只存储指向该文件的链接……我有点需要使用这个MySQL数据库作为这些PDF文件的虚拟文件系统 从PhP示例来看,似乎只需要在使用INSERT命令之前避开斜杠?有没有一种简单的方法可以在Linux命令行上实现这一点?您可以使用curl浏览器提交与GUI

我在本地机器上有一个PDF文件。我想将此文件上载到SQL数据库上的二进制BLOB中。这里提到的其他方法[都使用PHP。我想用一种简单干净的方法在Linux命令行上上传这个PDF文件。不幸的是,我没有访问远程文件系统的权限,所以不能像其他地方提到的那样只存储指向该文件的链接……我有点需要使用这个MySQL数据库作为这些PDF文件的虚拟文件系统


从PhP示例来看,似乎只需要在使用INSERT命令之前避开斜杠?有没有一种简单的方法可以在Linux命令行上实现这一点?

您可以使用curl浏览器提交与GUI浏览器相同的帖子。嗅探GUI浏览器发送的请求,然后使用curl复制该请求。

>我想您可以将mysql函数与一个小的shell脚本结合使用来实现这一点

未经测试的代码如下:

#!/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
!/bin/bash
如果[-z$1]
然后
echo“用法:insert.sh”
其他的
SQL=“插入文件表(blob列,文件名)值(加载文件(“$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
/insert.sh/full/path/to/file

错误检查、正确的临时文件创建、转义和其他细节的更好实现留给读者作为练习需要MySQL中的文件权限和文件的完整路径。

不确定这是否完全解决了我的问题,但我发现在MySQL上实现了一个文件系统层。我想我可以使用它自动将PDF文件存储为BLOB…仍然需要弄清楚如何将PDF文件的密钥存储在此文件系统中,以实现结构化的存储基于比更有意义的内容访问PDF文件



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


不过它有一些限制,最明显的是文件必须与mysql服务器存储在同一台主机上。

可能我在文章中对此不清楚……我没有使用任何GUI。我只想从命令行将PDF文件上载到SQL数据库。INSERT INTO table SET pdfBlob=,name='Study.PDF';我的问题是如何生成来自'dumby.pdf'的e抱歉,我以为您当前正在使用基于PHP的客户端上载文件。这将为您提供使用curl的清晰命令行方法。我的理解是LOAD_FILE要求文件位于托管MySQL服务器的远程计算机上。我没有这样的访问权限。您是对的。我错过了有关MySQL的部分远程。我猜你必须用你最喜欢的编程语言来编写。这应该可以在100行以内用任何合适的语言完成。