【问题标题】:Insert a BLOB value into MySQL database将 BLOB 值插入 MySQL 数据库
【发布时间】:2015-06-11 17:18:12
【问题描述】:

我有一个 MYSQL 数据库,其中有一列名为 img 的 BLOB 类型。

当我像这样在该列中插入一个值时:

LOAD_FILE('C:/Documents and Settings/All Users/Documents/My Pictures/Sample Pictures/Sunset.jpg') 

有效!

但是像这样:

LOAD_FILE('C:/Documents and Settings/Administrator/My Documents/My Pictures/picture.jpg')

它不起作用,它告诉我列 img 不能为空!

在这两种情况下,文件都存在,并且我以 root 用户(所有权限)连接到数据库,所以我不明白为什么会出现此错误。

提前致谢

【问题讨论】:

  • 您是否以提升的权限运行数据库服务器 (mysqld)?需要在现代 Windows 版本中以管理员身份运行(从管理员命令提示符或管理员帐户,如果是服务)以访问管理员文件夹中的文件。
  • 我在 Windows 中以“管理员”用户身份登录!
  • Windows 有 UAC(用户访问控制)。即使您以管理员身份登录,它也不允许在没有提升权限的情况下发生某些事情。您需要在管理员命令提示符下(右键单击命令提示符图标并选择以管理员身份运行)或作为管理员服务运行 mysqld。
  • 好的,你能告诉我具体怎么做吗?

标签: mysql blob


【解决方案1】:

ma​​x_allowed_pa​​cket

可能有问题

1.jpg是小图,2.jpg是大图

mysql> DESCRIBE  blob_files;
+-------+---------+------+-----+---------+----------------+
| Field | Type    | Null | Key | Default | Extra          |
+-------+---------+------+-----+---------+----------------+
| id    | int(11) | NO   | PRI | NULL    | auto_increment |
| file  | blob    | YES  |     | NULL    |                |
+-------+---------+------+-----+---------+----------------+
2 rows in set (0.01 sec)

mysql> INSERT INTO blob_files(file) VALUE(LOAD_FILE('D:/2.jpg'));
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> SHOW WARNINGS;
+---------+------+--------------------------------------------------------------
------------------+
| Level   | Code | Message
                  |
+---------+------+--------------------------------------------------------------
------------------+
| Warning | 1301 | Result of load_file() was larger than max_allowed_packet (104
8576) - truncated |
+---------+------+--------------------------------------------------------------
------------------+
1 row in set (0.00 sec)

mysql> INSERT INTO blob_files(file) VALUE(LOAD_FILE('D:/1.jpg'));
Query OK, 1 row affected (0.05 sec)

【讨论】:

    【解决方案2】:

    我将发布此作为答案,并根据需要进行修改。在我提到的 cmets 中,mysqld 需要以管理员身份运行。经过考虑,我意识到这实际上不是一个好主意,因为 Windows UAC 是有原因的。更好的选择是向文件夹添加必要的权限。

    转到管理员下的“我的文档”文件夹,右键单击“我的图片”,转到“安全性”,并使用读取属性将“本地服务”添加到您的权限中。然后您的 MySQL 服务器应该能够从该文件夹中读取数据。

    如果您想验证 LOCAL SERVICE 是正确的帐户,请转到 start -> run 并输入 services.msc 并按 Enter。找到 MySQL,右键单击并点击属性,转到 Log On 选项卡并查看它以哪个帐户运行。这是您应该添加到具有读取权限的文件夹的安全选项卡中的一个。

    【讨论】:

      猜你喜欢
      • 2019-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-27
      • 2014-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多