如何在mysql数据库(表)中插入图片?

问题描述 投票:0回答:9

我想将图像插入到表格中

 CREATE TABLE XX_SAMPLE(ID INT
                       ,IMAGE BLOB);

那么您能帮忙看看如何将图像插入到上表中吗?

mysql database blob mysql-loadfile
9个回答
40
投票

请尝试以下代码

INSERT INTO xx_BLOB(ID,IMAGE) VALUES(1,LOAD_FILE('E:/Images/jack.jpg'));

9
投票

你应该像这样使用LOAD_FILE

LOAD_FILE('/some/path/image.png')

4
投票

第 1 步:打开 mysql 工作台应用程序选择表。选择图像单元格右键单击选择“在编辑器中打开值”

第2步:点击加载按钮并选择图像文件

第3步:然后点击应用按钮

第4步:然后应用查询来保存图像。不要忘记图像数据类型是“BLOB”。 第5步:您可以查看上传的图片


1
投票

你可以尝试这样的事情..

CREATE TABLE 'sample'.'picture' ( 
'idpicture' INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, 
'caption' VARCHAR(45) NOT NULL, 
'img' LONGBLOB NOT NULL, 
 PRIMARY KEY('idpicture')) TYPE = InnoDB;

或参考以下链接获取教程和示例,可能会对您有所帮助。

http://forums.mysql.com/read.php?20,17671,27914

http://www.hockinson.com/programmer-web-designer-denver-co-usa.php?s=47


0
投票

如果我使用以下查询,

INSERT INTO xx_BLOB(ID,IMAGE) 
VALUES(1,LOAD_FILE('E:/Images/xxx.png'));

错误:没有这样的函数:LOAD_FILE


0
投票

这个问题我有三个答案:

  1. 在字符串中使用 BLOB 和 CLOB 数据类型并从 SQL 数据库检索二进制数据是违反 用户体验 UX 最佳实践的,因此建议您使用涉及存储图像 URL(或任何二进制数据)的技术数据库中的文件)。此 URL 将帮助用户应用程序检索和使用此二进制文件。

  2. 其次,BLOB 和 CLOB 数据类型仅适用于许多 SQL 版本,因此 LOAD_FILE 等函数或数据类型本身在某些版本中可能会丢失。

  3. 第三,不要使用 BLOB 或 CLOB。存储 URL;让用户应用程序从项目目录中的文件夹访问二进制文件。


0
投票

我尝试了上述所有解决方案但失败了,它只是向数据库添加了一个空文件。

但是,我可以通过将图像(

fileName.jpg
)文件首先移动到下面的文件夹(在我的例子中)
C:\ProgramData\MySQL\MySQL Server 5.7\Uploads
然后我执行下面的命令来完成它,它对我有用,

INSERT INTO xx_BLOB(ID,IMAGE) VALUES(1,LOAD_FILE('C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/fileName.jpg'));

希望这有帮助。


0
投票

接受的答案是正确的,但我遇到了很多

LOAD_FILE()
返回
NULL
的情况(如 24459149 中讨论的),我通常情况会更好,创建一个带有十六进制表示的导入文件:

docker run -d -p 3306:3306 -e MARIADB_ROOT_PASSWORD=test -e MARIADB_USER=test -e MARIADB_PASSWORD=test -e MARIADB_DATABASE=testdb mariadb:latest
echo "CREATE TABLE XX_SAMPLE(ID INT, IMAGE LONGBLOB)" |mysql -h 127.0.0.1 -u test --password=test testdb

echo -n "INSERT INTO XX_SAMPLE(ID,IMAGE) VALUES(1, 0x" >img_import.sql
cat /some/path/image.png |perl -ne "print unpack 'H*'" >> img_import.sql
echo ");" >> img_import.sql

mysql -h 127.0.0.1 -u test --password=test testdb <img_import.sql

此外,与

unpack
xxd
相比,Perl 的
hexdump
更容易使用,它们并不总是安装并且需要特殊标志来获取
mysql
客户端所期望的长串十六进制值而不中断。

更新:

  • 按照 Terai 的提议更改了报价。 (似乎是我的 ZSH 中没有出现的引用问题。)
  • 为示例表添加了其他 DDL,因为上面的原始 DDL 使用
    BLOB
    。对于正常尺寸的图像,您将需要
    MEDIUMBLOB
    甚至
    LONGBLOB
  • 添加了一个示例 docker 容器来完成示例。

-1
投票

这是在mysql工作台上——给出图像文件路径:

INSERT INTO XX_SAMPLE(id,image) VALUES(3,'/home/ganesan-pc/Documents/aios_database/confe.jpg');
© www.soinside.com 2019 - 2024. All rights reserved.