我想做什么?
- 我想使用命令行,使用 LOAD_FILE 函数将图片插入 MariaDB 数据库。
怎么了?
- 我总是得到 NULL 返回。
- 我不想要这样的解决方案:这是糟糕的风格,到目前为止我还没有看到 - 尝试存储完整路径!我想将这张图片存储在此数据库中,不是路径。
系统
mysql Ver 15.1 Distrib 10.1.17-MariaDB,适用于使用 readline 5.1 的 Linux (x86_64)
ArchLinux 4.7.2-1-ARCH
/home/user/Blob/Test.jpg
下一张名为Test.jpg的图片(817KB),/tmp/Test.jpg
甚至在/var/lib(mysql/images/Test.jpg
图片属于mysql用户和组,拥有我能想到的所有权限
-rwxrwxrwx 1 mysql mysql 836508 20. Feb 2016 Test.jpg
- 我测试了几个用户,即 mysql 和 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() loads null values
- 我对父目录有执行权限
- 明确授予 FILE 权限。 (在 .TO mysql@localhost 上授予文件)
- 我有刷新权限
- 我已经注销并重新登录
- 我已经通过
chmod
和chown
命令测试了几个属于mysql 或user 的目录 SHOW VARIABLES LIKE 'max_allowed_packet';
设置为 16 MB 或 16777216,图片为 817KB 大选择 HEX(LOAD_FILE('/home/user/Blob/Test.jpg'));
返回 NULL
解决方案?
我不知道这是否是 MariaDB 中的错误,或者我是否是唯一遇到此问题的人。 再次指出这一点:我想要将图片存储在此数据库中。我不想存储路径。这是一个实验,我要把图片存入数据库。
如果有人能帮我解决这个问题就太好了!
最佳答案
LOAD_FILE()
仅当文件位于数据库服务器上时才有效。如果服务器与文件在同一个系统上,那么加载它应该没有问题。如果是这样,我建议打开一个关于错误报告不充分的错误报告。
其他二进制加载数据到服务器的方法
通常,连接器提供将二进制数据加载到数据库中的方法。例如 MariaDB C 连接器提供 mysql_stmt_send_long_data
.
另一种选择是在客户端将数据转换为非二进制编码(例如 base64 或十六进制)并在服务器上对其进行解码(base64 与 FROM_BASE64
和十六进制与 UNHEX
)。
关于mysql - MariaDB 插入 BLOB 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39332201/