3 回答
TA贡献1890条经验 获得超9个赞
该手册指出以下内容:
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;
由此看来,在您的情况下,有不止一件事情可能是错误的...
您正在通过完整的路径吗?
权限设置正确吗?
函数返回什么?空值?
您是否尝试过手册中提供的查询?
TA贡献1830条经验 获得超3个赞
我在Linux上遇到了同样的问题...
select load_file('/tmp/data.blob');
+-----------------------------+
| load_file('/tmp/data.blob') |
+-----------------------------+
| NULL |
+-----------------------------+
最终,在用户和组所有权更改为“ mysql”之后,我可以成功加载文件:
sudo chown mysql:mysql /tmp/data.blob
TA贡献1946条经验 获得超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服务器实例,然后从查询浏览器使用该路径,一切都会很好。
添加回答
举报