当前位置: 首页 > 面试题库 >

MySQL LOAD_FILE()加载空值

琴修为
2023-03-14
问题内容

我正在尝试将xml文件的目录作为blob加载到数据库表中。每行将包含一个对应的Blob文件。通过python脚本将文件加载到表中时,值将插入为null。在mysql命令行中运行等效命令时,也是如此。

有一次,我可以在将一些文件夹权限更改为mysql后插入值,但是由于需要脚本权限,我不得不修改目录/ var / lib / mysql /
foo的所有权,因此值被重新插入为null,有效地打破了我写的脚本。我不记得要进行必要的目录权限更改。

以下是对该主题的讨论:

http://bugs.mysql.com/bug.php?id=38403

随着

MySQL LOAD_FILE返回NULL


问题答案:

确保:

  • 在父目录上有执行权限
  • 必须明确授予FILE特权。(上获得文件 对用户@本地)
  • 您拥有冲洗权限
  • 您已注销并重新登录

父目录权限的示例:

mysql> \!ls -ld`dirname / home / jlam / code / projectName / doc / filesForTesting / images / imageTest01.jpg`
drwxrwxr--。2 jlam jlam 4096 5月12日14:22 / home / jlam / code / projectName / doc / filesForTesting / images

mysql>选择十六进制(LOAD_FILE('/ home / jlam / code / projectName / doc / filesForTesting / images / image

Test01.jpg'));
+ ------------------------------------------------- -------------------------------------------------- ---------- +
| 十六进制(LOAD_FILE('/ home / jlam / code / projectName / doc / filesForTesting / images / imageTest01.jpg'))|
+ ------------------------------------------------- -------------------------------------------------- ---------- +
| NULL |
+ ------------------------------------------------- -------------------------------------------------- ---------- +
设置1行(0.00秒)



mysql> \!chmod o + x / home / jlam / code / projectName / doc / filesForTesting / images
mysql> \!ls -ld`dirname / home / jlam / code / projectName / doc / filesForTesting / images / imageTest01.jpg`
drwxrwxr-x。2 jlam jlam 4096 5月12日14:22 / home / jlam / code / projectName / doc / filesForTesting / images
mysql>选择十六进制(LOAD_FILE('/ home / jlam / code / projectName / doc / filesForTesting / images / imageTest01.jpg'));
+ ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------
| 十六进制(LOAD_FILE('/ home / jlam / code / projectName / doc / filesForTesting / images / imageTest01.jpg'))                                                                                                                                
+ ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------
| FFD8FFE1001845786966000049492A00080000000000000000000000FFEC00114475636B7900010004000000500000FFE10407687474703A2F2F6E732E61646F62652E636F6D2F786​​1702F312E302F003C3F787​​061636B657420626567696E3D22EFBBBF222069643D2257354869
+ ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------

用户权限示例:

16:38:09(getImages)〜/ code / projectName / doc / filesForTesting / images $ mysql -u eventCal -p eventCal
输入密码:

mysql>显示授权;
+ ------------------------------------------------- -------------------------------------------------- -------------- +
| 授予eventCal @ localhost |
+ ------------------------------------------------- -------------------------------------------------- -------------- +
| *。*对'eventCal'@'localhost'的授权使用已由密码'* xxxx'标识|
| 将所有特权授予tmp。*至'eventCal'@'localhost'|
| 将所有特权授予`eventCalTesting`。*到'eventCal'@'localhost'|
| 将所有特权授予`eventCal`。*到'eventCal'@'localhost'|
| 将所有特权授予`eventCal_categoryMigration`。*至'eventCal'@'localhost'|
+ ------------------------------------------------- -------------------------------------------------- -------------- +
设置5行(0.00秒)

mysql>选择十六进制(LOAD_FILE('/ home / jlam / code / projectName / doc / filesForTesting / images / imageTest01.jpg'));
+ ------------------------------------------------- -------------------------------------------------- ---------- +
| 十六进制(LOAD_FILE('/ home / jlam / code / projectName / doc / filesForTesting / images / imageTest01.jpg'))|
+ ------------------------------------------------- -------------------------------------------------- ---------- +
| NULL |
+ ------------------------------------------------- -------------------------------------------------- ---------- +
设置1行(0.00秒)

在其他根会话中:

mysql>将文件ON *。*授予eventCal @ localhost;
查询正常,受影响的0行(0.00秒)

mysql>刷新权限;
查询正常,受影响的0行(0.00秒)

在用户会话中,我仍然无法加载文件

mysql>选择十六进制(LOAD_FILE('/ home / jlam / code / projectName / doc / filesForTesting / images / imageTest01.jpg'));
+ ------------------------------------------------- -------------------------------------------------- ---------- +
| 十六进制(LOAD_FILE('/ home / jlam / code / projectName / doc / filesForTesting / images / imageTest01.jpg'))|
+ ------------------------------------------------- -------------------------------------------------- ---------- +
| NULL |
+ ------------------------------------------------- -------------------------------------------------- ---------- +
设置1行(0.00秒)

.....但是如果我注销并重新登录:

mysql>退出
再见

16:40:14(getImages)〜/ code / projectName / doc / filesForTesting / images $ mysql -u eventCal -p eventCal
输入密码:

mysql>选择十六进制(LOAD_FILE('/ home / jlam / code / projectName / doc / filesForTesting / images / imageTest01.jpg'));
+ ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------
| 十六进制(LOAD_FILE('/ home / jlam / code / projectName / doc / filesForTesting / images / imageTest01.jpg'))                                                                                                                                
+ ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------
| FFD8FFE1001845786966000049492A00080000000000000000000000FFEC00114475636B7900010004000000500000FFE10407687474703A2F2F6E732E61646F62652E636F6D2F786​​1702F312E302F003C3F787​​061636B657420626567696E3D22EFBBBF222069643D2257354869
+ ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------


 类似资料:
  • 我想让SQL LOAD_FILE函数正常工作,并且已经阅读了关于这个问题的每一个问答文档,但下面是正在发生的事情。 当我想从主目录加载_文件时: 所以在得到这个之后,我想问题可能是MySQL无法访问我的主目录。我试着运行这个,效果很好: 然后

  • 我试图将xml文件目录作为blob加载到数据库表中。每一行将包含一个对应的blob文件。当通过python脚本将文件加载到表中时,值被插入为null。在mysql命令行中运行等效命令时也是如此。 在将一些文件夹权限更改为mysql后,我一度能够插入值,但由于需要脚本权限,我不得不修改目录/var/lib/mysql/foo的所有权,因此值被重新插入为null,这实际上破坏了我编写的脚本。我记不起这

  • 我正在使用Apache PDFBox渲染PDF文档的缩略图。因此,我加载PDF并将第一页用作缩略图。问题是,对于特定的文档,似乎没有正确加载。对于所有其他文档,它的工作方式与预期一致。 <代码>ByteArrayInputStream is=新建ByteArrayInputStream(pdfData) PDDocument pdf=PDDocument。载荷(is,true) <代码>列表 pd

  • 问题内容: 我正在使用cdh5 quickstart vm,并且我有一个像这样的文件(此处不完整): 我使用了这个脚本: 该脚本有效,但是生成的文件为空,您有什么想法吗? 问题答案: 最后,只有此模式有效:如果我添加或删除与该配置不同的空格,那么我将出现错误(我还为元组添加了“名称”,并在其为空时指定了“ null”,并更改了作者之间的顺序和来源,但即使没有这种配置,它仍然是错误的) 工作脚本是这

  • 我试图在Spring boot类中使用@Autowired注释将存储库放入一个用@Service注释的类中。但是,存储库显示为空。 以下是相关代码: 此时它会得到一个NPE,因为licenceReposity为空。 我可以使用此构造函数访问控制器类中的licenseRepository 但是,由于我直接在静态main方法中调用构造函数,这似乎不可用。将存储库放入此类的最佳方法是什么? 编辑:感谢您

  • 我的应用程序部署在一个JBoss6服务器中,该服务器包含最新的BC实现bcprov-jdk15on-151.jar放在服务器安装的lib文件夹中。尝试运行以下代码段时: JBoss似乎没有成功地在tmp目录中打开JAR进行验证。我做了多个测试,例如:-在一个单独的主类中手动验证JAR-在tmp目录中创建一个文件并在JBoss应用程序代码中打开它-更改默认的tmp目录(java.io.tmpdir)