MySQL - BLOB



許多使用者應用程式需要儲存不同型別的資料,包括文字、影像、檔案等等。在 MySQL 資料庫中使用 BLOB 允許您將所有這些型別的資料儲存在同一個資料庫中,從而無需使用單獨的檔案系統。

MySQL BLOB 資料型別

MySQL BLOB(二進位制大型物件)資料型別用於儲存二進位制資料,例如影像、音訊、影片或任何其他型別的二進位制檔案。BLOB 列可以儲存可變長度的二進位制資料,使其適用於處理各種大小的檔案。

考慮一個透過表單收集使用者資訊的應用程式。此資訊可能包括個人詳細資訊,例如姓名和地址,以及影像證明,例如 PAN 卡或 Aadhaar 卡。您可以將這些檔案作為 BLOB 儲存在 MySQL 資料庫中,而不是在檔案系統中單獨管理它們。

語法

以下是為表字段分配 BLOB 資料型別的基本語法:

CREATE TABLE table_name (column_name BLOB,...)

示例

讓我們考慮一個基本示例來展示如何為表字段分配 BLOB 資料型別。在這裡,我們建立一個名為“demo_table”的表,其中包含兩個欄位“ID”和“DEMO_FILE”:

CREATE TABLE demo_table (
   ID INT NOT NULL, 
   DEMO_FILE BLOB
);

獲得以下輸出:

Query OK, 0 rows affected (0.01 sec)

您可以使用以下命令查看錶結構:

DESC demo_table;

獲得的表如下:

欄位 型別 預設值 額外
ID int NULL
DEMO_FILE blob NULL

將資料插入 BLOB 欄位

您可以透過使用 LOAD_FILE() 函式將檔案載入到 BLOB 欄位,將一些值插入到資料庫表中。但是,在執行此操作之前,請確保滿足以下條件:

  • 檔案存在 - 您要插入的檔案必須存在於 MySQL 伺服器主機位置。要確定所需的位置,您可以使用以下命令中的 secure_file_priv 變數。如果此命令的結果不為空,則要載入的檔案必須位於該特定目錄中。

  • SHOW VARIABLES LIKE secure_file_priv;
    
  • 指定完整的檔案路徑 - 使用 LOAD_FILE() 函式時,必須將檔案的完整路徑作為引數傳遞,例如“/users/tutorialspoint/file_name.txt”。對於 Windows 使用者,請記住在路徑中使用雙反斜槓作為跳脫字元(“//users//tutorialspoint//file_name.txt”)。

  • 檢查“max_allowed_packet”值 - MySQL 伺服器具有一個 max_allowed_packet 變數,該變數確定載入的最大允許檔案大小。要檢查此變數的值,可以使用以下命令:

  • SHOW VARIABLES LIKE max_allowed_packet;
    

    確保檔案大小不超過此變數中指定的值。

  • 授予 FILE 許可權 - 確保 MySQL 使用者帳戶已授予 FILE 許可權。要向用戶授予檔案許可權,可以使用以下命令(通常由具有管理員許可權的使用者執行,例如“root”):

  • GRANT FILE ON *.* TO 'username'@'hostname';
    FLUSH PRIVILEGES;
    
  • 檔案可讀性 - 最後,確保 MySQL 伺服器可以讀取該檔案。

示例

要將值插入先前建立的表“demo_table”,可以使用以下 INSERT 查詢:

INSERT INTO demo_table 
VALUES(1,
LOAD_FILE("C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Uploads\\sample.txt"));

要驗證插入,可以使用以下查詢從“demo_table”檢索資料:

SELECT * FROM demo_table;

我們可以在下面的輸出中看到,該表包含“sample.txt”檔案中內容的十六進位制字串。您可以將任何型別的檔案載入到 MySQL 中,例如影像、多媒體檔案、PDF 文件等:

ID DEMO_FILE
1 0x5468697320697320612073616D706C652066696C65

BLOB 資料型別的型別

MySQL 提供四種類型的 BLOB 資料型別,每種資料型別具有不同的最大儲存容量。雖然它們都用於儲存二進位制資料(例如影像或檔案),但它們在可以容納的物件的最大大小方面有所不同。以下是四種 BLOB 資料型別:

  • TINYBLOB - 它最多可以儲存 255 個位元組或 255 個字元。

  • BLOB - 它最多可以儲存 65,535(216 - 1)個位元組,相當於 64KB 的資料。

  • MEDIUMBLOB - 它最多可以儲存 16,777,215(224 - 1)個位元組,或 4GB。

  • LONGBLOB - 它是這些資料型別中最大的,可以儲存高達 4,294,967,295 個位元組(232 - 1)的物件,或 4GB。

讓我們嘗試建立具有上述所有型別 BLOB 資料型別的表。

使用 TINYBLOB 資料型別建立表

在此示例中,我們使用 TINYBLOB 資料型別在欄位上建立一個名為“demo_tinyblob”的表:

CREATE TABLE demo_tinyblob (ID INT, DEMO_FIELD TINYBLOB);

輸出

獲得以下輸出:

Query OK, 0 rows affected (0.02 sec)

驗證

您可以使用以下命令查看錶結構:

DESC demo_tinyblob;

獲得的表如下:

欄位 型別 預設值 額外
ID int NULL
DEMO_FIELD tinyblob NULL

使用 MEDIUMBLOB 資料型別建立表

在這裡,我們使用以下查詢建立一個名為“demo_mediumblob”的表,該表具有 MEDIUMBLOB 型別的欄位:

CREATE TABLE demo_mediumblob (ID INT, DEMO_FIELD MEDIUMBLOB);

輸出

以上程式碼的輸出如下:

Query OK, 0 rows affected (0.02 sec)

驗證

您可以使用以下命令查看錶結構:

DESC demo_mediumblob;

以下是獲得的表格:

欄位 型別 預設值 額外
ID int NULL
DEMO_FIELD mediumblob NULL

建立帶有 LONGBLOB 資料型別的表

在本例中,我們正在建立一個名為“demo_longblob”的表,其中包含一個 LONGBLOB 型別的欄位:

CREATE TABLE demo_longblob (ID INT, DEMO_FIELD LONGBLOB);

輸出

以下是生成的輸出:

Query OK, 0 rows affected (0.02 sec)

驗證

您可以使用以下命令查看錶結構:

DESC demo_longblob;

生成的表如下所示:

欄位 型別 預設值 額外
ID int NULL
DEMO_FIELD longblob NULL
廣告