首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MariaDB插入BLOB图像

问MariaDB插入BLOB图像
EN

Stack Overflow用户
提问于 2016-09-05 13:56:44
回答 1查看 11.5K关注 0票数 4

我想做什么?

  • 我想使用命令行使用MariaDB函数将图片插入到LOAD_FILE数据库中。

怎么了?

  • 我总是得到一个空返回。
  • 我不希望想要这样的解决方案:这是糟糕的风格,而且到目前为止我还没有看到--尝试存储完整的路径!我希望将这张图片存储在这个数据库中,而不是路径。

系统

  • mysql 15.1远端10.1.17-MariaDB,用于Linux (x86_64),使用readline 5.1
  • ArchLinux 4.7.2-1-拱
  • 一幅名为Test.jpg (817 and )的图片,在/home/user/Blob/Test.jpg,/tmp/Test.jpg,甚至/var/lib(mysql/images/Test.jpg下面
  • 这张图片属于mysql用户和组,并拥有我所能想象到的所有权限。 -rwxrwxrwx 1 mysql 836508 20. 2016年2月Test.jpg
  • 我测试了几个用户,即mysql和root。

数据库

我用一个名为和Longblob变量的表创建了一个名为Blobtest的数据库。

代码语言:javascript
复制
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/目录)

代码语言:javascript
复制
INSERT INTO Test VALUES (1, LOAD_FILE('/home/user/Blob/Test.jpg'), LOAD_FILE('/home/user/Blob/Test.jpg'));

解决这一问题的方法

我遵循了这个链接FILE() loads null values的说明

  • 我对父目录具有执行权限。
  • 文件特权是明确授予的。(授予文件。到mysql@localhost)
  • 我享有的特权
  • 我已经退出并重新登录
  • 我已经通过chmod和chown命令测试了几个目录,它们属于mysql或用户。
  • SHOW VARIABLES LIKE 'max_allowed_packet';设置为16 MB或16777216,图片大小为817 MB。
  • select HEX(LOAD_FILE('/home/user/Blob/Test.jpg'));返回空

解决方案?

我不知道这是MariaDB中的一个bug,还是我是唯一一个有这个问题的人。为了再次指出这一点:我希望将图片存储在这个数据库中。我不想存储路径。这是一个实验,我必须将图片存储在数据库中。

如果有人能帮我解决这个问题,那就太棒了!

EN

回答 1

Stack Overflow用户

发布于 2018-03-16 08:47:52

只有当文件位于数据库服务器上时,LOAD_FILE()才能工作。如果服务器与文件位于同一个系统上,那么加载它就没有问题。如果是这样的话,我建议打开一个错误报告,说明错误报告的不足。

将数据二进制加载到服务器的其他方法

通常,连接器提供将二进制数据加载到数据库的方法。例如,MariaDB C连接器提供mysql_stmt_send_long_data。

另一种选择是将数据转换为客户端的非二进制编码(例如base64或十六进制),并在服务器上对其进行解码(base64与FROM_BASE64,十六进制与UNHEX)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39332201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档