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服務器實例,然后從查詢瀏覽器使用該路徑,一切都會很好。
添加回答
舉報