iT邦幫忙

1

SQL可以存實體檔案嗎?

leo226 2012-10-15 00:24:1225836 瀏覽

在DB裡,若有一個資料表的欄位存放著xxx.pdf的資料,是代表這個pdf檔存放在這個資料表裡嗎?還是說它只是記錄檔名而已,實際要抓檔案還是要透過程式指定到實體存放pdf的實體路徑才能讀取這個檔,也就是說DB只存放檔名而已,要抓檔案還是要到實體路徑去存取,DB無法直接存放實體檔案.
如果可以直接存放檔案,那要取得檔案的指令要怎麼下?
SELECT file FROM a_table where xxx.pdf = xxx.pdf;
這樣好像也只是把檔案秀出來,沒辦法存取到檔案,有點不懂...=,=

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
4
xexxo2002
iT邦新手 4 級 ‧ 2012-10-16 08:38:57
最佳解答

欄位格式是 BLOB 的話就是放檔案,char、vchar 之類的就是檔名,再者,如果是看到檔名,那就真的只是檔名,BLOB 欄位 select 出來是一堆亂碼。

12
SunAllen
iT邦研究生 1 級 ‧ 2012-10-15 01:01:20

DB裡面應該是存路徑和檔名的資料

檔案本身,則是存放在硬碟裡,透過DB裡面的記錄去連接到這個檔案。

外獅佬 iT邦大師 1 級 ‧ 2012-10-15 01:11:32 檢舉

早期這麼做的居多...第二種也不是沒有...不過,Server要花很多$$$
畢竟,把檔案從資料庫讀出來、存回檔案,或者,把檔案塞進資料庫,挺耗資源的...

leo226 iT邦新手 4 級 ‧ 2012-10-15 10:14:51 檢舉

謝謝,那請問DB裡有欄位資料記錄了xxx.pdf或xxx.jpg,我要如何判斷它是存放檔名而已,還是它是把實體檔案放進DB裡面呢?
如果要查出它實際存放的路徑,就只能從src_code裡面查它的路徑寫法而已是嗎?
從DB上是查不出它實體存放的路徑在那裡~

18
外獅佬
iT邦大師 1 級 ‧ 2012-10-15 01:05:27

兩種方式都可以
只記錄檔名,或者,把實體檔案放到資料庫....
兩者各有利弊。
只記錄檔名,備份的時候,必須同時備份檔案與資料庫,同時,如果遇到資料庫需要回復
必須兩者一併回復。
把檔案放到資料庫,備份比較簡單,但是,需要花費更多時間進行備份,畢竟,資料庫變大了(很多)
如果是使用SQL Server 2008/2008 R2/2012,可以考慮使用File Stream的方式將檔案儲存到資料庫。同時,如果裝有適當的iFilter,還可以進行全文檢索。

看更多先前的回應...收起先前的回應...
SunAllen iT邦研究生 1 級 ‧ 2012-10-15 01:06:59 檢舉

L大大大大大大簽名簽名

player iT邦大師 1 級 ‧ 2012-10-15 17:01:57 檢舉

個人建議, DB 與 File 分開放
DB 裡只記錄檔名與放該檔案路徑的必要資訊
(如果檔案是分開來放到不同路徑的話)
以Windows為例, 當同一個資料夾裡有超過3000個檔案的話
就會變慢

全文檢索? 不必了, 再好的Filter, 要處理非純文字的內容, 都會消耗效能
更何況圖檔或是合死的pdf檔, 你也很難全文檢索

只是檔案沒放到DB裡, 最大的問題在資安
尤其在Windows下, 只要有User權限的帳號, 都有可能看得到, 所以要留意各資料夾的權限

leo226 iT邦新手 4 級 ‧ 2012-10-16 00:28:47 檢舉

了解,所以現在我要如何判斷DB上存放檔名的欄位是放檔名還是放檔案呢?

外獅佬 iT邦大師 1 級 ‧ 2012-10-16 10:50:25 檢舉

leo226提到:
存放檔名的欄位是放檔名還是放檔案呢?

檔名...這...需要懷疑嗎?

我要發表回答

立即登入回答