每個人在使用MySQL時,都可能遇到過存儲文件的情況。例如,我們在使用外鍵時,可能需要將圖片或視頻文件作為外鍵存儲進(jìn)數(shù)據(jù)庫中。那么,這些文件具體存儲在哪里呢?
實際上,MySQL通過BLOB來存儲二進(jìn)制大對象文件。當(dāng)我們將文件作為BLOB存儲時,MySQL會將文件分為若干個數(shù)據(jù)塊,然后將這些數(shù)據(jù)塊存儲在數(shù)據(jù)表中的BLOB列中。但是,對于較大的文件,我們并不推薦將其存儲在數(shù)據(jù)庫中。
那么,如果我們不想將文件存儲在數(shù)據(jù)庫中呢?此時,我們可以采用文件系統(tǒng)存儲的方式,即將文件存儲在服務(wù)器的文件系統(tǒng)中,然后在數(shù)據(jù)表中存儲文件路徑,通過路徑來訪問對應(yīng)的文件。在這種情況下,我們需要在數(shù)據(jù)表中創(chuàng)建一個VARCHAR類型的列,用于存儲文件路徑。
CREATE TABLE `files` ( `id` int(11) NOT NULL AUTO_INCREMENT, `file_name` varchar(255) NOT NULL, `file_path` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
如上所示的數(shù)據(jù)表模型,其中包含了文件名和文件路徑兩個字段。我們可以通過如下的PHP代碼將文件存儲到指定的文件夾中:
$target_dir = "uploads/"; $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file);
代碼中,我們通過move_uploaded_file()函數(shù)將上傳的文件存儲到指定的文件夾中。此時,我們可以通過如下的代碼將文件路徑存儲到數(shù)據(jù)表中:
INSERT INTO files (file_name, file_path) VALUES ('testfile', 'uploads/testfile.jpg');
注意,我們需要確保文件路徑的正確性,然后才能通過文件路徑訪問對應(yīng)的文件。