2014-01-06 164 views
-1

我正在学习mysql,并且在构建图像数据库时使用此代码有很大的麻烦....如何将图像插入数据库?

我知道如何创建一个表,并且我知道我需要longblob来处理图像。不是问题。目前我正在创建通过:CREATE TABLE pics ( picid int unsigned not null auto_increment primary key, filename varchar(255) not null unique, caption varchar(255) not null, pic longblob not null );

非空”在picid给我的问题。因为接下来当我尝试使用此代码填充时: INSERT INTO pics values ( NULL, 'bear.jpg', 'a picture of a bear', LOAD_FILE('C:/Users/USERS_NAME/Pictures/bear.jpg') );

我碰到错误#1048 - 列'pic'不能为空。

请大家帮忙。我失去了我的想法....

+0

为什么你用这个标签[标签:SQL服务器] ...答案是,你*不应该*可以存储图像在数据库中。 – Kermit

+0

建议使用sql-server标签...我正在学习dude ..我被建议使用路径而不是将图片加载到数据库中 – acegreene2

回答

2

这不是picid这就是问题所在。 LOAD_FILE('C:/Users/USERS_NAME/Pictures/bear.jpg')最有可能失败并返回NULL

更何况,你不应该将图像存储在数据库中。图像是文件,应该像文件系统一样存储。数据库应该在文件系统中保存元数据+文件的地址。

请参阅Effeciently storing user uploaded images on the file system了解一个好的系统。

+0

load_file应该返回该文件,尽管...路径不是“空”。它是正确的。 – acegreene2

+0

@ acegreene2:“应该”和“是”之间有很大的差距。确保LOAD_FILE正在返回您认为它所做的事。另外,请阅读其他答案。 –

+0

感谢您的快速回复。你提到我的文章有点过分了,btree并不是我所经历的。但我的路径使用正斜杠而不是反斜杠(b/c反斜杠是在mysql中的转义命令),我应该只使用双反斜杠? – acegreene2