我正在做一个舞台,我必须使用 BLOB 将图像保存在数据库中。
我试图这样做:
INSERT IGNORE INTO cinema_multisala.movie VALUES
('The Lion King', '2021-12-01', '21:00:00', 'description', 'cast', LOAD_FILE('C:/Users/danie/Desktop/LionKing.jpg'), 'producer');
但是 LOAD_FILE 总是返回 null,我该怎么办?我不明白我的路径错误。我已经尝试将所有这些分隔符用于路径:/、\ 和 \\。
(我想使用代码而不是使用 MySqlWorkbench 的 Load Value From File,这样我就可以正确上传图像)
secure_file_priv | C:\ProgramData\MySQL\MySQL Server 8.0\data\Uploads\
现在我把我的图片放在那个目录中,但查询结果不一样了:
INSERT IGNORE INTO cinema_multisala.movie VALUES ('The Lion King', '2021-12-01', '21:00:00', 'description', 'cast', LOAD_FILE('/LionKing.jpg'), 'producer');
我有 FILE 权限。
选择长度(LOAD_FILE('LionKing.jpg'));返回空
答案 0 :(得分:0)
是否设置了 secure_file_priv 变量?
mysql> show variables like "secure_file_priv";
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| secure_file_priv | |
+------------------+-------+
1 row in set (0.00 sec)
如果secure_file_priv 系统变量设置为非空目录名,则要加载的文件必须位于该目录中。
答案 1 :(得分:0)
终于一切正常,我做到了,我必须放完整路径,而不仅仅是来自secure_file_priv的相对路径:
INSERT INTO cinema_multisala.movie VALUES
('title', '2021-12-01', '21:00:00', 'description', 'cast', LOAD_FILE('C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Data\\Uploads\\LionKing.jpg') , 'producer');
奇怪的是,我不得不从 BLOB 修改为 MEDIUMBLOB,但在使用 MySqlWorkbench 的文件加载值之前,我能够在 BLOB 中上传相同的图像,不知道为什么。