将图片插入sql表时出错

Posted

技术标签:

【中文标题】将图片插入sql表时出错【英文标题】:Error while inserting picture into sql table 【发布时间】:2013-11-15 13:39:11 【问题描述】:

我正在尝试使用以下查询将“png”图像插入 sql 表字段(称为条形图,其类型为 blob)。

INSERT INTO disease_symptom_soc(barchart) Values ((SELECT BULKColumn FROM OPENROWSET(BULK N'/home/barchartC2936861.png', SINGLE_BLOB) AS Image)) where disease_id='C2936861';

我收到以下错误。可能是什么原因?

ERROR 1064 (42000):您的 SQL 语法有错误;检查 与您的 mysql 服务器版本相对应的手册 在第 1 行的 '(BULK N'/home/barchart' 附近使用的语法

【问题讨论】:

【参考方案1】:

我猜你可以使用 LOAD_FILE

例子:

INSERT INTO expBLOB(ID,IMAGE) VALUES(1,LOAD_FILE('/some/path/image.png'))

【讨论】:

嗨,我试过:INSERT INTO disease_symptom_soc(barchart) VALUES(LOAD_FILE('path/barchartC2936861.png')) WHERE disease_id='C2936861';但是我收到错误:错误 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“WHERE disease_id='C2936861”附近使用正确的语法【参考方案2】:

如果可以,请将列的 DataType 更改为“image”。取决于您使用的 sql server 版本。否则,如果它是基于 oracle 的 db ,则必须创建一个 loadfile proc 并按如下方式执行它: http://arjudba.blogspot.com/2008/06/how-to-insert-blob-dataimage-video-into.html

【讨论】:

我担心您的链接不再有效【参考方案3】:

MySql OpenrowSet 不用于将文件复制到数据库中,而是用于查询带有连接字符串的外部文件(csv、xls),例如

OPENROWSET ('MSDASQL','mysql connection string','query')

我建议您使用任何语言制作的简单程序加载文件(我不知道您是否使用 php、c#... 进行开发)并通过简单的插入将已加载到内存中的文件传递给数据库查询。

【讨论】:

那么这里的链接中,他们不是指要加载的图像吗? weblogs.sqlteam.com/peterl/archive/2007/09/26/… 据我所知,这种类型的 sintax 在旧版本的 sqlServer 上已经工作了一段时间:几年前我曾尝试使用这些,但给我带来的问题比简化更多:首先“ @" 参数化函数一次都没有工作让我发誓,因为我必须对每个文件名进行查询:这个 sintax 的另一个大缺陷是你必须为每台安装程序的 pc 拥有相同的目录这是一个很大的限制:我建议您花一点力气编写一些不受限制、更灵活和可调试的东西。

以上是关于将图片插入sql表时出错的主要内容,如果未能解决你的问题,请参考以下文章

将数据插入 HIVE 表时出错

通过包过程插入带有可变数组列的表时出错

通过 PHP 将数据插入 MySQL 表时出错

由于带有 sequelize.js 的 UUID 外键,尝试将行插入表时出错

尝试将数据从 Excel 导入 SQL 表时出错

创建 SQL 触发器以更新另一个表时出错