我有几个文件要一起存储在 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:\\zipfolder\\zipdoc.txt');
+----------------------------------------+
| load_file('C:\\zipfolder\\zipdoc.txt') |
+----------------------------------------+
| zipcontent text |
+----------------------------------------+
select load_file('C:\\zipfolder\\zipdoc.zip');
+----------------------------------------+
| load_file('C:\\zipfolder\\zipdoc.zip') |
+----------------------------------------+
| NULL |
+----------------------------------------+
Run Code Online (Sandbox Code Playgroud)
从改变文件扩展名.zip来.zip_为前。解决了这个问题:
select load_file('C:\\zipfolder\\zipdoc.zip_');
+---------------------------------------------------------------------------------------------------------------------------------------+
| load_file('C:\\zipfolder\\zipdoc.zip_') |
+---------------------------------------------------------------------------------------------------------------------------------------+
| PK??¶ FÄLR?SAÏ? ?
zipdoc.txtzipcontent textPK??¶ ¶ FÄLR?SAÏ? ?
? zipdoc.txtPK?? ? ? 8 7 |
+---------------------------------------------------------------------------------------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)
因此,看起来 Windows 10 以比其他文件更严格的方式阻止对 .zip 文件的访问。
给予EVERYONE获得的zip文件允许load_file访问原来的zip文件的功能。使用以下 Powerhell 脚本(从此处采用)授予访问权限后:
$acl = Get-Acl C:\zipfolder\zipdoc.zip
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("Jeder","Read","Allow")
$acl.SetAccessRule($AccessRule)
$acl | Set-Acl C:\zipfolder\zipdoc.zip
Run Code Online (Sandbox Code Playgroud)
load_file 能够访问 zipfile:
select load_file('C:\\zipfolder\\zipdoc.zip');
+---------------------------------------------------------------------------------------------------------------------------------------+
| load_file('C:\\zipfolder\\zipdoc.zip') |
+---------------------------------------------------------------------------------------------------------------------------------------+
| PK??¶ FÄLR?SAÏ? ?
zipdoc.txtzipcontent textPK??¶ ¶ FÄLR?SAÏ? ?
? zipdoc.txtPK?? ? ? 8 7 |
+---------------------------------------------------------------------------------------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)
因此,解决方案是授予EVERYONE对 zip 文件的访问权限或仅更改文件的扩展名(管理员仍然需要找到更具限制性的工作访问级别)。
补充:正如@Álvaro González 所提到的,使用设置适当权限的归档程序也是一种解决方案。
| 归档时间: |
|
| 查看次数: |
116 次 |
| 最近记录: |