mysql - MariaDB 插入 BLOB 图像

标签 mysql image null blob mariadb

我想做什么?

  • 我想使用命令行,使用 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
    
  • 我测试了几个用户,即 mysqlroot

数据库

我创建了一个名为 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 上授予文件)
  • 我有刷新权限
  • 我已经注销并重新登录
  • 我已经通过chmodchown 命令测试了几个属于mysqluser 的目录
  • SHOW VARIABLES LIKE 'max_allowed_pa​​cket'; 设置为 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/

相关文章:

php - MySQL表在服务器之间复制

php - 用户评论的数据库架构

c# - 比较两个位图图像以检查它们在 WPF 中是否不同的最快方法

c++ - NULL 的非指针等价物是什么?

java - 拆分返回 null

php - PDO Echo 10 值按降序排列

php - 如何在SQL查询中使用ELSE?

java - 在图像中寻找模式

php - 从数据库 php mysql 检索时图像显示空白

Hibernate JPA 不为空值在集合表中插入行