MySQLload_file()用于.zip文件夹

我有几个文件要一起存储在 mysql 表的 blob 类型列中。所以我只是把它们放在一个文件夹中,然后压缩它。我在使用 load_file() 函数存储图像、文本和 pdf 文件时从来没有遇到过任何问题,但是当我尝试使用 .zip 文件夹时,我得到了一个 NULL 值。我错过了什么?谢谢!

回答

我注意到了同样的现象。

这确实看起来有点奇怪,而且与操作系统有关。这是我的调查结果(使用 MARIA DB 10.4,Windows 10 Pro20H2):

例如,在给定的文件夹中,C:zipfolder我创建了一个zipdoc.txt包含一些文本内容的文本文件和一个包含该文本文件的 zip 文件。

这给出了以下load_file输出:

select load_file('C:zipfolderzipdoc.txt');
+----------------------------------------+
| load_file('C:zipfolderzipdoc.txt') |
+----------------------------------------+
| zipcontent text                        |
+----------------------------------------+

select load_file('C:zipfolderzipdoc.zip');
+----------------------------------------+
| load_file('C:zipfolderzipdoc.zip') |
+----------------------------------------+
| NULL                                   |
+----------------------------------------+

从改变文件扩展名.zip.zip_为前。解决了这个问题:

select load_file('C:zipfolderzipdoc.zip_');
+---------------------------------------------------------------------------------------------------------------------------------------+
| load_file('C:zipfolderzipdoc.zip_')                                                                                               |
+---------------------------------------------------------------------------------------------------------------------------------------+
| PK??¶     FÄLR?SAÏ?   ?
   zipdoc.txtzipcontent textPK??¶ ¶     FÄLR?SAÏ?   ?
       ?         zipdoc.txtPK??    ? ? 8   7      |
+---------------------------------------------------------------------------------------------------------------------------------------+

因此,看起来 Windows 10 以比其他文件更严格的方式阻止对 .zip 文件的访问。

给予EVERYONE获得的zip文件允许load_file访问原来的zip文件的功能。使用以下 Powerhell 脚本(从此处采用)授予访问权限后:

$acl = Get-Acl C:zipfolderzipdoc.zip
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("Jeder","Read","Allow")
$acl.SetAccessRule($AccessRule)
$acl | Set-Acl C:zipfolderzipdoc.zip

load_file 能够访问 zipfile:

select load_file('C:zipfolderzipdoc.zip');
+---------------------------------------------------------------------------------------------------------------------------------------+
| load_file('C:zipfolderzipdoc.zip')                                                                                                |
+---------------------------------------------------------------------------------------------------------------------------------------+
| PK??¶     FÄLR?SAÏ?   ?
   zipdoc.txtzipcontent textPK??¶ ¶     FÄLR?SAÏ?   ?
       ?         zipdoc.txtPK??    ? ? 8   7      |
+---------------------------------------------------------------------------------------------------------------------------------------+

因此,解决方案是授予EVERYONE对 zip 文件的访问权限或仅更改文件的扩展名(管理员仍然需要找到更具限制性的工作访问级别)。

补充:正如@Álvaro González 所提到的,使用设置适当权限的归档程序也是一种解决方案。


以上是MySQLload_file()用于.zip文件夹的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>