当我将图像插入MySQL表时,结果为NULL

时间:2017-01-18 15:22:57

标签: mysql sql mysql-workbench mariadb

这段代码有什么问题,我想在表格中插入图片,但是当我执行此代码时,图片字段的结果为NULL

我尝试使用 MySQL Workbench 执行:

CREATE TABLE image(keyh int, img blob);
INSERT INTO image VALUES(1, load_file('d:\Picture\cppLogo.png'));

4 个答案:

答案 0 :(得分:1)

  

要使用此功能,该文件必须位于服务器主机上   必须指定文件的完整路径名,并且必须具有   FILE特权。该文件必须是所有人都可读的,其大小必须更小   比max_allowed_pa​​cket字节。如果是secure_file_priv系统变量   设置为非空目录名称,要加载的文件必须是   位于该目录中。

     

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

http://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_load-file

你能做什么?

检查运行的用户mysql,并确保该用户可以读取该文件。确保安全设置允许读取文件,且文件大小不超过max_allowed_packet

请参阅SHOW VARIABLES LIKE 'max_allowed_packet'

对我来说,看起来该文件位于您的localhost上,并且您尝试上传它。使用LOAD_FILE()无法做到这一点。该文件必须已在服务器上。

这个问题也可能是由你的windows目录分隔符\(如RiggsFolly所述)引起的,用于转义,转换为unix样式/然后:

LOAD_FILE('D:/Picture/cppLogo.png')

或者您的图片的文件大小比BLOB字段可以容纳的文件大,如Balazs Vago所说。

答案 1 :(得分:0)

我发现正确的语法如下:

C:/wamp/binsql5.5.20/data/56VRLRFE.jpg'

不是这个

C:\wamp\binsql5.5.20\data\56VRLRFE.jpg'

感谢你们所有答案:D

答案 2 :(得分:0)

打开您的MySql Command Line Client,然后以root用户登录并键入

mysql> SHOW VARIABLES LIKE "secure_file_priv";

这将向您显示MySql用于访问文件的安全路径。像

+------------------+-----------------------+
| Variable_name    | Value                 |
+------------------+-----------------------+
| secure_file_priv | /var/lib/mysql-files/ |
+------------------+-----------------------+

您可以将文件粘贴到此文件夹中,也可以将“ secure_file_priv”变量值更改为“空字符串”,以便它可以从任何位置读取文件。

答案 3 :(得分:0)

在Windows上,基本问题是默认情况下,MySql在网络帐户下作为Windows服务运行,这意味着服务器只能访问几个文件位置。因此,要使load_file正常工作,必须将文件放置在服务器上的文件夹中,服务可以读取该文件夹。似乎没有任何文档。在我的调查中,与load_file一起使用的唯一文件夹是C:\ ProgramData \ MySQL \ MySQL Server 8.0 \ Uploads

运行查询以测试负载...

..._id

请注意,在Windows上,您必须使用double \或/分隔路径元素。失败时将返回NULL,否则将返回文件的内容。

现在假设有一个名为db.image的表,其中包含源列和图像列。源是字符,图像是斑点。将a.jpg加载到表中的命令是

select load_file('C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Uploads\\1.txt') ;