14

我试图将文件加载到 MySQL blob(在 Mac 上)。

我的查询是

INSERT INTO MyTable VALUES('7', LOAD_FILE('Dev:MonDoc.odt'))

未出现错误,但文件未加载到 blob 中。

4

5 回答 5

11

手册规定如下:

LOAD_FILE(文件名)

读取文件并将文件内容作为字符串返回。要使用此功能,文件必须位于服务器主机上,必须指定文件的完整路径名,并且必须具有 FILE 权限。该文件必须可供所有人读取,并且其大小小于 max_allowed_pa​​cket 字节。如果将secure_file_priv 系统变量设置为非空目录名,则要加载的文件必须位于该目录中。

如果文件不存在或由于不满足上述条件之一而无法读取,则该函数返回 NULL。

从 MySQL 5.0.19 开始,character_set_filesystem 系统变量控制以文字字符串形式给出的文件名的解释。

mysql> UPDATE t
            SET blob_col=LOAD_FILE('/tmp/picture')
            WHERE id=1;

从这里,我看到不止一件事在你的情况下可能是错误的......

  • 你正在通过完整的路径吗?
  • 权限设置是否正确?
  • 函数返回什么?无效的?
  • 您是否尝试过使用手册中给出的查询?
于 2011-11-22T16:31:43.120 回答
7

我在Linux上遇到了同样的问题...

select load_file('/tmp/data.blob');
+-----------------------------+
| load_file('/tmp/data.blob') |
+-----------------------------+
| NULL                        |
+-----------------------------+

最终,在用户和组所有权更改为“mysql”后,我可以成功加载文件:

sudo chown mysql:mysql /tmp/data.blob
于 2013-04-14T22:47:10.567 回答
5

如果您在 Windows 中,请双重避开完整路径中的斜线。

于 2013-10-25T11:54:32.330 回答
3

我只是想再添加一个我在测试中发现的警告:

当使用select load_file('/path/to/theFile.txt');您正在加载的文件必须在运行 sql 实例的机器上时

这让我很长时间不高兴,因为我一直使用 MySQL 工作台将文件加载到我们的各种 sql 实例中,并且当使用类似的命令时,LOAD DATA LOCAL INFILE 'C:/path/to/theFile.csv' INTO TABLE可以轻松地从本地硬盘驱动器中抓取文件并将其处理到表中,无论如何实际运行 sql 实例的位置。但是,该load_file命令至少对我来说似乎并没有以相同的方式表现(也许存在我不知道的 local_load_file() 命令)。MySQL 似乎只允许它从运行 sql 实例的本地系统中查找文件。

因此,如果您像我一样无法弄清楚为什么 load_file 总是返回 NULL,请不要担心...将文件上传到 sql server 实例,然后从 Query 浏览器使用该路径,一切都会好起来的。

于 2014-12-24T00:38:39.393 回答
0

谢谢。

运行 mysql 的用户需要拥有该文件。我的错误是,我认为它只需要能够读取或执行文件。

于 2015-11-10T18:34:25.883 回答