我想要做什么?
- 我想使用命令行并使用LOAD_FILE函数将图片插入到MariaDB数据库中。
有什么问题?
- 我总是得到一个空值返回。
- 我不希望得到这样的解决方案:这是一个糟糕的风格,我之前从未见过 - 尝试存储完整路径!我想要将这个图片存储在这个数据库中,而不是存储路径。
系统
mysql Ver 15.1 Distrib 10.1.17-MariaDB, for Linux (x86_64) using readline 5.1
ArchLinux 4.7.2-1-ARCH
A picture called Test.jpg (817KB) under
/home/user/Blob/Test.jpg
,/tmp/Test.jpg
and even under/var/lib(mysql/images/Test.jpg
The picture belongs to the user and group mysql and has every permission I could imagine
-rwxrwxrwx 1 mysql mysql 836508 20. Feb 2016 Test.jpg
- I tested several users i.e. mysql and root
数据库
我创建了一个名为Blobtest的数据库,其中包含一个名为Test的表格,其中有一个Blob和一个Longblob变量。
CREATE TABLE Test (id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,longblobimg LONGBLOB NOT NULL, blobimg BLOB NOT NULL, PRIMARY KEY(id));
+-------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| longblobimg | longblob | NO | | NULL | |
| blobimg | blob | NO | | NULL | |
+-------------+------------------+------+-----+---------+----------------+
插入语句
(在这种情况下使用 /home/user/directory)
INSERT INTO Test VALUES (1, LOAD_FILE('/home/user/Blob/Test.jpg'), LOAD_FILE('/home/user/Blob/Test.jpg'));
解决此问题的方法
我按照此链接中的说明进行操作:MySQL LOAD_FILE()加载null值
- 我拥有父文件夹的执行权限
- 已明确授权 FILE 权限(GRANT FILE on . TO mysql@localhost)
- 我已经刷新了权限
- 我已注销并重新登录
- 我测试了几个目录,使用
chmod
和chown
命令属于mysql或user SHOW VARIABLES LIKE 'max_allowed_packet';
被设置为 16 MB 或 16777216,图片大小为 817KB。select HEX(LOAD_FILE('/home/user/Blob/Test.jpg'));
返回 NULL
解决方案?
我不知道这是否是 MariaDB 的一个 bug,还是只有我遇到了这个问题。 再次强调:我想将图片存储在此数据库中。我不想存储路径。这是一个实验,我必须将图片存储在数据库中。
如果有人能帮我解决这个问题,那就太棒了!