【问题标题】:How to use LOAD_FILE to load a file into a MySQL blob?如何使用 LOAD_FILE 将文件加载到 MySQL blob?
【发布时间】:2011-11-22 16:13:28
【问题描述】:

我尝试将文件加载到 MySQL blob(在 Mac 上)。

我的查询是

INSERT INTO MyTable VALUES('7', LOAD_FILE('Dev:MonDoc.odt'))

没有出现错误,但文件没有加载到 blob 中。

【问题讨论】:

  • 查询似乎缺少右括号。
  • 哦,是的,但在我的查询中括号存在但不起作用

标签: mysql mysql-loadfile


【解决方案1】:

manual 声明如下:

LOAD_FILE(文件名)

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

如果文件不存在或无法读取,因为其中一个 前面的条件不满足,函数返回NULL。

从 MySQL 5.0.19 开始,character_set_filesystem 系统变量 控制以文字形式给出的文件名的解释 字符串。

mysql> UPDATE t
            SET blob_col=LOAD_FILE('/tmp/picture')
            WHERE id=1;

从这里,我看到不止一件事在你的情况下可能是错误的......

  • 您是否通过了完整路径?
  • 权限设置是否正确?
  • 函数返回什么?空?
  • 您用手册中给出的查询试过了吗?

【讨论】:

  • 我犯了 2 个错误。文件不在 mysqlserver 上,我的用户没有文件权限。我让 change ang 给你,我希望,一个好消息!
【解决方案2】:

我在 Linux 上遇到了同样的问题...

select load_file('/tmp/data.blob');
+-----------------------------+
| load_file('/tmp/data.blob') |
+-----------------------------+
| NULL                        |
+-----------------------------+

最终我可以在用户和组所有权更改为“mysql”后成功加载文件:

sudo chown mysql:mysql /tmp/data.blob

【讨论】:

  • 为我工作。谢谢! (但为什么它起作用了?我的 data.blob 对我的组和其他人具有读取权限:-rw-rw-r--)
  • 我认为数据库用户还需要设置MySQL中的“文件权限”。
  • |警告 | 1301 | load_file() 的结果大于 max_allowed_pa​​cket (104 8576) - 被截断 |
【解决方案3】:

如果您在 Windows 中,请对完整路径中的斜线进行双重转义。

【讨论】:

    【解决方案4】:

    我只是想再补充一个我在测试中发现的警告:

    当使用select load_file('/path/to/theFile.txt');时,您正在加载的文件必须在运行 sql 实例的机器上

    这让我很生气很长时间,因为我一直使用 MySQL 工作台将文件加载到我们的各种 sql 实例中,并且当使用像 LOAD DATA LOCAL INFILE 'C:/path/to/theFile.csv' INTO TABLE 这样的命令时,这些命令很容易从我的本地硬盘驱动器中抓取文件并且无论实际的 sql 实例在哪里运行,都将其处理到表中。然而,load_file 命令似乎至少对我来说并没有以同样的方式表现(也许存在我不知道的 local_load_file() 命令)。 MySQL 似乎只允许它从运行 sql 实例的本地系统中查找文件。

    因此,如果您像我一样无法弄清楚为什么 load_file 总是返回 NULL,请不要担心...将文件上传到 sql server 实例,然后使用查询浏览器中的该路径,一切都会是好吧。

    【讨论】:

      【解决方案5】:

      谢谢。

      运行 mysql 的用户需要拥有该文件。我的错误是,我认为它只需要能够读取或执行文件。

      【讨论】:

      • 还可以通过以下方式检查您的权限:“SELECT user, file_priv FROM mysql.user;”
      猜你喜欢
      • 2013-08-06
      • 2022-11-08
      • 2015-12-12
      • 2010-11-03
      • 2014-03-19
      • 1970-01-01
      • 2012-05-19
      • 2020-06-10
      • 2020-06-12
      相关资源
      最近更新 更多