31

我想使用我的软件前端存储图像和 .docx/.doc、.pptx/.ppt、.pdf 文件。我不明白如何实现这一点以及如何将 BLOB 和 CLOB 文件插入表中。请帮忙。

我正在使用 Kubuntu 11.04、MySQL5、Qt 4.7.3。

4

6 回答 6

38

两种方式:

1 - 使用LOAD_FILE函数 -

INSERT INTO table1 VALUES(1, LOAD_FILE('data.png'));

2 - 将文件插入为十六进制字符串,例如 -

INSERT INTO table1 VALUES 
  (1, x'89504E470D0A1A0A0000000D494844520000001000000010080200000090916836000000017352474200AECE1CE90000000467414D410000B18F0BFC6105000000097048597300000EC300000EC301C76FA8640000001E49444154384F6350DAE843126220493550F1A80662426C349406472801006AC91F1040F796BD0000000049454E44AE426082');
于 2012-05-24T06:56:03.470 回答
13
INSERT INTO MY_TABLE(id, blob_col) VALUES(1, LOAD_FILE('/full/path/to/file/myfile.png')

LOAD_FILE 附加了许多条件。从MySQL 文档

LOAD_FILE(文件名)

读取文件并将文件内容作为字符串返回。要使用此功能,文件必须位于服务器主机上,必须指定文件的完整路径名,并且必须具有 FILE 权限。该文件必须可供所有人读取,并且其大小小于 max_allowed_pa​​cket 字节。如果将secure_file_priv 系统变量设置为非空目录名,则要加载的文件必须位于该目录中。

如果文件不存在或由于不满足上述条件之一而无法读取,则该函数返回 NULL。

此外,Linux 中的 LOAD_FILE 也存在错误。有关该错误,请参阅http://bugs.mysql.com/bug.php?id=38403 ,以及返回 NULL 的 MySQL LOAD_FILE以获取解决方法。在 Ubuntu 12.04、MySQL 5.5.32 上,这对我有用:

  1. 将文件复制到 /tmp
  2. 将所有权更改为 mysql 用户chown mysql:mysql /tmp/yourfile
  3. 以 mysql root 用户身份登录 mysql,因此您确定您具有 FILE 权限
  4. 运行您的插入语句
于 2013-08-06T13:52:02.273 回答
9

或者您可以仅使用 MySQL Workbench,选择行、最后一行,插入没有 blob 的行,然后只需右键单击并选择“从文件加载值”。

在此处输入图像描述

于 2015-04-29T14:30:31.187 回答
2
INSERT INTO table1 VALUES(1, LOAD_FILE(data.png));

不会工作,但

INSERT INTO table1 VALUES(1, LOAD_FILE('data.png'));

应该(假设 data.png 存在于本地目录中)

于 2013-06-01T23:57:20.107 回答
2

对于那些在通过查询保存 Blob 时出现“列'图像'不能为空”错误的人:-

打开您的 MySql 命令行客户端并使用 root 用户登录并输入

mysql> SHOW VARIABLES LIKE "secure_file_priv";

这将向您显示 MySql 用于访问文件的安全路径。就像是

+------------------+-----------------------+
| Variable_name    | Value                 |
+------------------+-----------------------+
| secure_file_priv | /var/lib/mysql-files/ |
+------------------+-----------------------+

您可以将文件粘贴到此文件夹中,也可以将“secure_file_priv”变量值更改为“空字符串”,以便它可以从任何地方读取文件。

于 2019-07-19T13:05:50.907 回答
0

如果您使用的是 mysql 工作台,只需右键单击字段(单元格)并选择“从文件加载值”选项,然后浏览到文件并单击打开,然后单击应用。它会自动生成这样的查询

UPDATE `dbname`.`tablename` SET `columnname` = ? WHERE (`row` = '1');
于 2020-06-01T15:47:58.380 回答