2014-01-06 163 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