将BLOB值插入MySQL数据库

时间:2014-05-10 00:15:29

标签: mysql blob

我有一个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用户身份连接到数据库(所有权限),所以我不明白为什么我会收到此错误。

提前致谢

2 个答案:

答案 0 :(得分:1)

max_allowed_pa​​cket

可能有问题

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标签,查看其运行的帐户。这是您应该添加到具有读取权限的文件夹的安全选项卡中的那个。