每個人在使用MySQL時,都可能遇到過存儲文件的情況。例如,我們在使用外鍵時,可能需要將圖片或視頻文件作為外鍵存儲進數據庫中。那么,這些文件具體存儲在哪里呢?
實際上,MySQL通過BLOB來存儲二進制大對象文件。當我們將文件作為BLOB存儲時,MySQL會將文件分為若干個數據塊,然后將這些數據塊存儲在數據表中的BLOB列中。但是,對于較大的文件,我們并不推薦將其存儲在數據庫中。
那么,如果我們不想將文件存儲在數據庫中呢?此時,我們可以采用文件系統存儲的方式,即將文件存儲在服務器的文件系統中,然后在數據表中存儲文件路徑,通過路徑來訪問對應的文件。在這種情況下,我們需要在數據表中創建一個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;
如上所示的數據表模型,其中包含了文件名和文件路徑兩個字段。我們可以通過如下的PHP代碼將文件存儲到指定的文件夾中:
$target_dir = "uploads/"; $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file);
代碼中,我們通過move_uploaded_file()函數將上傳的文件存儲到指定的文件夾中。此時,我們可以通過如下的代碼將文件路徑存儲到數據表中:
INSERT INTO files (file_name, file_path) VALUES ('testfile', 'uploads/testfile.jpg');
注意,我們需要確保文件路徑的正確性,然后才能通過文件路徑訪問對應的文件。