我试图将文件加载到 MySQL blob(在 Mac 上)。
我的查询是
INSERT INTO MyTable VALUES('7', LOAD_FILE('Dev:MonDoc.odt'))
未出现错误,但文件未加载到 blob 中。
我试图将文件加载到 MySQL blob(在 Mac 上)。
我的查询是
INSERT INTO MyTable VALUES('7', LOAD_FILE('Dev:MonDoc.odt'))
未出现错误,但文件未加载到 blob 中。
手册规定如下:
LOAD_FILE(文件名)
读取文件并将文件内容作为字符串返回。要使用此功能,文件必须位于服务器主机上,必须指定文件的完整路径名,并且必须具有 FILE 权限。该文件必须可供所有人读取,并且其大小小于 max_allowed_packet 字节。如果将secure_file_priv 系统变量设置为非空目录名,则要加载的文件必须位于该目录中。
如果文件不存在或由于不满足上述条件之一而无法读取,则该函数返回 NULL。
从 MySQL 5.0.19 开始,character_set_filesystem 系统变量控制以文字字符串形式给出的文件名的解释。
mysql> UPDATE t
SET blob_col=LOAD_FILE('/tmp/picture')
WHERE id=1;
从这里,我看到不止一件事在你的情况下可能是错误的......
我在Linux上遇到了同样的问题...
select load_file('/tmp/data.blob');
+-----------------------------+
| load_file('/tmp/data.blob') |
+-----------------------------+
| NULL |
+-----------------------------+
最终,在用户和组所有权更改为“mysql”后,我可以成功加载文件:
sudo chown mysql:mysql /tmp/data.blob
如果您在 Windows 中,请双重避开完整路径中的斜线。
我只是想再添加一个我在测试中发现的警告:
当使用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 浏览器使用该路径,一切都会好起来的。
谢谢。
运行 mysql 的用户需要拥有该文件。我的错误是,我认为它只需要能够读取或执行文件。