我想将图像插入到表格中
CREATE TABLE XX_SAMPLE(ID INT
,IMAGE BLOB);
那么您能帮忙看看如何将图像插入到上表中吗?
请尝试以下代码
INSERT INTO xx_BLOB(ID,IMAGE) VALUES(1,LOAD_FILE('E:/Images/jack.jpg'));
你应该像这样使用LOAD_FILE:
LOAD_FILE('/some/path/image.png')
你可以尝试这样的事情..
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
如果我使用以下查询,
INSERT INTO xx_BLOB(ID,IMAGE)
VALUES(1,LOAD_FILE('E:/Images/xxx.png'));
错误:没有这样的函数:LOAD_FILE
这个问题我有三个答案:
在字符串中使用 BLOB 和 CLOB 数据类型并从 SQL 数据库检索二进制数据是违反 用户体验 UX 最佳实践的,因此建议您使用涉及存储图像 URL(或任何二进制数据)的技术数据库中的文件)。此 URL 将帮助用户应用程序检索和使用此二进制文件。
其次,BLOB 和 CLOB 数据类型仅适用于许多 SQL 版本,因此 LOAD_FILE 等函数或数据类型本身在某些版本中可能会丢失。
第三,不要使用 BLOB 或 CLOB。存储 URL;让用户应用程序从项目目录中的文件夹访问二进制文件。
我尝试了上述所有解决方案但失败了,它只是向数据库添加了一个空文件。
但是,我可以通过将图像(
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'));
希望这有帮助。
接受的答案是正确的,但我遇到了很多
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
客户端所期望的长串十六进制值而不中断。
更新:
BLOB
。对于正常尺寸的图像,您将需要 MEDIUMBLOB
甚至 LONGBLOB
。这是在mysql工作台上——给出图像文件路径:
INSERT INTO XX_SAMPLE(id,image) VALUES(3,'/home/ganesan-pc/Documents/aios_database/confe.jpg');