我有一个MYSQL数据库,其中包含一个名为img的BLOB类型的列。
当我像这样在该列中插入一个值时:
LOAD_FILE('C:/Documents and Settings/All Users/Documents/My Pictures/Sample Pictures/Sunset.jpg')
它有效!
但是像这样:
LOAD_FILE('C:/Documents and Settings/Administrator/My Documents/My Pictures/picture.jpg')
它没有用,它告诉我列img不能为空!
在这两种情况下,文件都存在,并且我以root用户身份连接到数据库(所有权限),所以我不明白为什么我会收到此错误。
提前致谢
答案 0 :(得分:1)
max_allowed_packet
可能有问题1.jpg是一张小图片,2.jpg是一张大图片
mysql> DESCRIBE blob_files;
+-------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| file | blob | YES | | NULL | |
+-------+---------+------+-----+---------+----------------+
2 rows in set (0.01 sec)
mysql> INSERT INTO blob_files(file) VALUE(LOAD_FILE('D:/2.jpg'));
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> SHOW WARNINGS;
+---------+------+--------------------------------------------------------------
------------------+
| Level | Code | Message
|
+---------+------+--------------------------------------------------------------
------------------+
| Warning | 1301 | Result of load_file() was larger than max_allowed_packet (104
8576) - truncated |
+---------+------+--------------------------------------------------------------
------------------+
1 row in set (0.00 sec)
mysql> INSERT INTO blob_files(file) VALUE(LOAD_FILE('D:/1.jpg'));
Query OK, 1 row affected (0.05 sec)
答案 1 :(得分:0)
我将发布此作为答案,我会根据需要对其进行修改。在我提到的评论中,mysqld需要以管理员身份运行。经过考虑,我意识到这实际上不是一个好主意,因为Windows UAC是有原因的。更好的选择是为文件夹添加必要的权限。
转到管理员下的“我的文档”文件夹,右键单击“我的图片”,转到安全性,然后添加“#34; LOCAL SERVICE"使用read属性获取权限。然后你的MySQL服务器应该能够从该文件夹中读取。
如果您想验证LOCAL SERVICE是否是正确的帐户,请转到start -> run
并输入services.msc
并按Enter键。找到MySQL,右键单击并点击属性,转到Log On
标签,查看其运行的帐户。这是您应该添加到具有读取权限的文件夹的安全选项卡中的那个。