我想做什么?
怎么了?
系统
mysql Ver 15.1使用readline 5.1分发10.1.17-MariaDB,用于Linux(x86_64)
ArchLinux 4.7.2-1-ARCH
在/home/user/Blob/Test.jpg
,/tmp/Test.jpg
甚至/var/lib(mysql/images/Test.jpg
该图片属于用户和组mysql,拥有我可以想象的所有权限
-rwxrwxrwx 1 mysql mysql 836508 20. Feb 2016 Test.jpg
数据库
我创建了一个名为 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 /目录)
INSERT INTO Test VALUES (1, LOAD_FILE('/home/user/Blob/Test.jpg'), LOAD_FILE('/home/user/Blob/Test.jpg'));
解决此问题的方法
我按照此链接MySQL LOAD_FILE() loads null values
的说明进行操作chmod
和chown
命令测试了几个属于 mysql 或用户的目录SHOW VARIABLES LIKE 'max_allowed_packet';
设置为16 MB或16777216,图片为817KB big select HEX(LOAD_FILE('/home/user/Blob/Test.jpg'));
返回NULL 方案吗
我不知道这是MariaDB中的错误,还是我是唯一一个遇到此问题的人。 再次指出这一点:我想要将图片存储在此数据库中。我不想要存储路径。这是一个实验,我必须将图片存储在数据库中。
如果有人可以帮我解决这个问题,那真是太棒了!
答案 0 :(得分:1)
LOAD_FILE()
才有效。如果服务器与文件位于同一系统上,则加载它应该没有问题。如果是这样,我建议打开有关错误报告不足的错误报告。
通常,连接器提供将二进制数据加载到数据库中的方法。例如,MariaDB C连接器提供mysql_stmt_send_long_data
。
另一种选择是在客户端将数据转换为非二进制编码(例如base64或hex),并在服务器上解码(base64为FROM_BASE64
,hex为UNHEX
)。