Dữ liệu BLOB trong MySQL là gì?

Một đốm màu (còn được gọi là đối tượng lớn nhị phân, đối tượng lớn cơ bản, BLOB hoặc BLOb) là một tập hợp dữ liệu nhị phân được lưu trữ dưới dạng một thực thể trong hệ thống quản lý cơ sở dữ liệu. Các đốm màu thường là hình ảnh, âm thanh hoặc các đối tượng đa phương tiện khác, mặc dù đôi khi mã thực thi nhị phân được lưu trữ dưới dạng đốm màu. Hỗ trợ cơ sở dữ liệu cho các đốm màu không phổ biến

Về cơ bản, điều đó có nghĩa là dữ liệu của bạn được lưu trực tiếp ở định dạng nhị phân. (tất cả dữ liệu là nhị phân, tôi biết. )

BLOB là viết tắt của Đối tượng lớn nhị phân có thể chứa một lượng dữ liệu thay đổi. Nó được sử dụng để lưu trữ dữ liệu nhị phân và cho các cột lưu trữ nhị phân dung lượng cao. Bạn có thể lưu trữ bất kỳ loại tệp nào bao gồm tài liệu PDF, Tệp MP3 và Tệp Video

Các giá trị BLOB được coi là chuỗi nhị phân (chuỗi byte). Chúng có bộ ký tự nhị phân và đối chiếu, sắp xếp và so sánh dựa trên các giá trị số của byte trong giá trị cột

Có bốn loại BLOB. TINYBLOB, BLOB, MEDIUMBLOB và LONGBLOB. Kích thước tối đa của một đối tượng BLOB được xác định bởi loại của nó

  • TINYBLOB. Độ dài tối đa 255 (2^8 - 1) byte. Mỗi giá trị TINYBLOB được lưu trữ bằng cách sử dụng tiền tố có độ dài một byte cho biết số lượng byte trong giá trị
  • BÃI. Độ dài tối đa 65535 (2^16 - 1) byte hoặc 64KB trong bộ lưu trữ. Mỗi giá trị BLOB được lưu trữ bằng tiền tố có độ dài hai byte cho biết số lượng byte trong giá trị
  • VỪABLOB. Độ dài tối đa là 16777215 (2^24 - 1) byte hoặc 16 MB trong bộ lưu trữ. Mỗi giá trị MEDIUMBLOB được lưu trữ bằng tiền tố có độ dài ba byte cho biết số byte trong giá trị
  • LONGBLOB. Độ dài tối đa là 4294967295 (2^32 - 1) byte hoặc 4GB dung lượng lưu trữ. Mỗi giá trị LONGBLOB được lưu trữ bằng cách sử dụng tiền tố có độ dài bốn byte cho biết số lượng byte trong giá trị

Một số lưu ý khác Kiểu dữ liệu BLOB

  • Bạn không phải chỉ định độ dài của bất kỳ cột BLOB nào
  • Cột BLOB không thể có giá trị MẶC ĐỊNH

2. Cách sử dụng loại BLOB

Chúng tôi sẽ sử dụng chức năng LOAD_FILE(đường dẫn của tệp) để tải nội dung tệp dưới dạng nội dung BLOB trong MySQL. Nó yêu cầu một đường dẫn đầy đủ của tệp làm tham số để đọc dữ liệu từ tệp

Hãy chứng minh điều này thông qua một ví dụ

Chúng tôi tạo

UPDATE
	b_table
SET
	file_data = LOAD_FILE('d:/sample.txt')
WHERE
	id = 1;
6 bằng cột BLOB

CREATE TABLE b_table (
	id bigint (20) PRIMARY KEY,
	file_data blob
);

Bây giờ hãy chèn các giá trị vào

UPDATE
	b_table
SET
	file_data = LOAD_FILE('d:/sample.txt')
WHERE
	id = 1;
7 bằng hàm LOAD_FILE()

INSERT INTO b_table
		VALUES(1, LOAD_FILE('d:/sample.txt'))

Hoặc chèn chuỗi HEX

INSERT INTO b_table
		VALUES(1, X'848016608498FE15C6050001000006020007002E000005E84501960844CFF15C6050001000006020008002E000405E84D002608498FE15C6050001000006350800020000002E0001000000FF0000002000200005E8440026084C0FD15C60500014002');

Cập nhật trường BLOB bằng hàm LOAD_FILE()

UPDATE
	b_table
SET
	file_data = LOAD_FILE('d:/sample.txt')
WHERE
	id = 1;


Cần một công cụ GUI tốt cho cơ sở dữ liệu?

Tóm lược. trong hướng dẫn này, bạn sẽ học cách xử lý dữ liệu BLOB bằng PHP PDO. Chúng tôi sẽ chỉ cho bạn cách chèn, cập nhật và chọn dữ liệu BLOB trong cơ sở dữ liệu MySQL

Dữ liệu BLOB trong MySQL là gì?
Dữ liệu BLOB trong MySQL là gì?

Đôi khi, vì lý do bảo mật, bạn có thể cần lưu trữ các đối tượng dữ liệu lớn, chẳng hạn như. g. , hình ảnh, tệp PDF và video trong cơ sở dữ liệu MySQL

MySQL cung cấp loại BLOB có thể chứa một lượng lớn dữ liệu. BLOB là viết tắt của đối tượng dữ liệu lớn nhị phân. Giá trị tối đa của đối tượng BLOB được chỉ định bởi bộ nhớ khả dụng và kích thước gói giao tiếp. Bạn có thể thay đổi kích thước gói giao tiếp bằng cách sử dụng biến 

/** * PHP MySQL BLOB Demo */ class BlobDemo { const DB_HOST = 'localhost'; const DB_NAME = 'classicmodels'; const DB_USER = 'root'; const DB_PASSWORD = ''; /** * Open the database connection */ public function __construct() { // open database connection $conStr = sprintf("mysql:host=%s;dbname=%s;charset=utf8", self::DB_HOST, self::DB_NAME); try { $this->pdo = new PDO($conStr, self::DB_USER, self::DB_PASSWORD); //for prior PHP 5.3.6 //$conn->exec("set names utf8"); } catch (PDOException $e) { echo $e->getMessage(); } } /** * close the database connection */ public function __destruct() { // close the database connection $this->pdo = null; } }

Code language: PHP (php)
0 trong MySQL và 

/** * PHP MySQL BLOB Demo */ class BlobDemo { const DB_HOST = 'localhost'; const DB_NAME = 'classicmodels'; const DB_USER = 'root'; const DB_PASSWORD = ''; /** * Open the database connection */ public function __construct() { // open database connection $conStr = sprintf("mysql:host=%s;dbname=%s;charset=utf8", self::DB_HOST, self::DB_NAME); try { $this->pdo = new PDO($conStr, self::DB_USER, self::DB_PASSWORD); //for prior PHP 5.3.6 //$conn->exec("set names utf8"); } catch (PDOException $e) { echo $e->getMessage(); } } /** * close the database connection */ public function __destruct() { // close the database connection $this->pdo = null; } }

Code language: PHP (php)
1 trong phần cài đặt PHP

Hãy xem cách PHP PDO xử lý loại BLOB trong MySQL

Đầu tiên, chúng ta tạo một bảng mới có tên là

/** * PHP MySQL BLOB Demo */ class BlobDemo { const DB_HOST = 'localhost'; const DB_NAME = 'classicmodels'; const DB_USER = 'root'; const DB_PASSWORD = ''; /** * Open the database connection */ public function __construct() { // open database connection $conStr = sprintf("mysql:host=%s;dbname=%s;charset=utf8", self::DB_HOST, self::DB_NAME); try { $this->pdo = new PDO($conStr, self::DB_USER, self::DB_PASSWORD); //for prior PHP 5.3.6 //$conn->exec("set names utf8"); } catch (PDOException $e) { echo $e->getMessage(); } } /** * close the database connection */ public function __destruct() { // close the database connection $this->pdo = null; } }

Code language: PHP (php)
2 trong cơ sở dữ liệu mẫu để thực hành

Bảng

/** * PHP MySQL BLOB Demo */ class BlobDemo { const DB_HOST = 'localhost'; const DB_NAME = 'classicmodels'; const DB_USER = 'root'; const DB_PASSWORD = ''; /** * Open the database connection */ public function __construct() { // open database connection $conStr = sprintf("mysql:host=%s;dbname=%s;charset=utf8", self::DB_HOST, self::DB_NAME); try { $this->pdo = new PDO($conStr, self::DB_USER, self::DB_PASSWORD); //for prior PHP 5.3.6 //$conn->exec("set names utf8"); } catch (PDOException $e) { echo $e->getMessage(); } } /** * close the database connection */ public function __destruct() { // close the database connection $this->pdo = null; } }

Code language: PHP (php)
2 chứa ba cột

  • Cột id là khóa chính, cột tự động tăng
  • Cột mime lưu trữ loại mime của tệp
  • Cột dữ liệu có kiểu dữ liệu là BLOB được sử dụng để lưu trữ nội dung của tệp

Câu lệnh CREATE TABLE sau đây tạo bảng

/** * PHP MySQL BLOB Demo */ class BlobDemo { const DB_HOST = 'localhost'; const DB_NAME = 'classicmodels'; const DB_USER = 'root'; const DB_PASSWORD = ''; /** * Open the database connection */ public function __construct() { // open database connection $conStr = sprintf("mysql:host=%s;dbname=%s;charset=utf8", self::DB_HOST, self::DB_NAME); try { $this->pdo = new PDO($conStr, self::DB_USER, self::DB_PASSWORD); //for prior PHP 5.3.6 //$conn->exec("set names utf8"); } catch (PDOException $e) { echo $e->getMessage(); } } /** * close the database connection */ public function __destruct() { // close the database connection $this->pdo = null; } }

Code language: PHP (php)
2

CREATE TABLE files ( id INT AUTO_INCREMENT PRIMARY KEY, mime VARCHAR (255) NOT NULL, data BLOB NOT NULL );

Code language: SQL (Structured Query Language) (sql)

Thứ hai, chúng tôi định nghĩa một lớp có tên là

/** * PHP MySQL BLOB Demo */ class BlobDemo { const DB_HOST = 'localhost'; const DB_NAME = 'classicmodels'; const DB_USER = 'root'; const DB_PASSWORD = ''; /** * Open the database connection */ public function __construct() { // open database connection $conStr = sprintf("mysql:host=%s;dbname=%s;charset=utf8", self::DB_HOST, self::DB_NAME); try { $this->pdo = new PDO($conStr, self::DB_USER, self::DB_PASSWORD); //for prior PHP 5.3.6 //$conn->exec("set names utf8"); } catch (PDOException $e) { echo $e->getMessage(); } } /** * close the database connection */ public function __destruct() { // close the database connection $this->pdo = null; } }

Code language: PHP (php)
5 với đoạn mã sau

/** * PHP MySQL BLOB Demo */ class BlobDemo { const DB_HOST = 'localhost'; const DB_NAME = 'classicmodels'; const DB_USER = 'root'; const DB_PASSWORD = ''; /** * Open the database connection */ public function __construct() { // open database connection $conStr = sprintf("mysql:host=%s;dbname=%s;charset=utf8", self::DB_HOST, self::DB_NAME); try { $this->pdo = new PDO($conStr, self::DB_USER, self::DB_PASSWORD); //for prior PHP 5.3.6 //$conn->exec("set names utf8"); } catch (PDOException $e) { echo $e->getMessage(); } } /** * close the database connection */ public function __destruct() { // close the database connection $this->pdo = null; } }

Code language: PHP (php)

Trong phương thức

/** * PHP MySQL BLOB Demo */ class BlobDemo { const DB_HOST = 'localhost'; const DB_NAME = 'classicmodels'; const DB_USER = 'root'; const DB_PASSWORD = ''; /** * Open the database connection */ public function __construct() { // open database connection $conStr = sprintf("mysql:host=%s;dbname=%s;charset=utf8", self::DB_HOST, self::DB_NAME); try { $this->pdo = new PDO($conStr, self::DB_USER, self::DB_PASSWORD); //for prior PHP 5.3.6 //$conn->exec("set names utf8"); } catch (PDOException $e) { echo $e->getMessage(); } } /** * close the database connection */ public function __destruct() { // close the database connection $this->pdo = null; } }

Code language: PHP (php)
6, chúng tôi mở một kết nối cơ sở dữ liệu tới cơ sở dữ liệu MySQL và trong phương thức 

/** * PHP MySQL BLOB Demo */ class BlobDemo { const DB_HOST = 'localhost'; const DB_NAME = 'classicmodels'; const DB_USER = 'root'; const DB_PASSWORD = ''; /** * Open the database connection */ public function __construct() { // open database connection $conStr = sprintf("mysql:host=%s;dbname=%s;charset=utf8", self::DB_HOST, self::DB_NAME); try { $this->pdo = new PDO($conStr, self::DB_USER, self::DB_PASSWORD); //for prior PHP 5.3.6 //$conn->exec("set names utf8"); } catch (PDOException $e) { echo $e->getMessage(); } } /** * close the database connection */ public function __destruct() { // close the database connection $this->pdo = null; } }

Code language: PHP (php)
7, chúng tôi đóng kết nối

Chèn dữ liệu BLOB vào cơ sở dữ liệu

PHP PDO cung cấp một cách thuận tiện để làm việc với dữ liệu BLOB bằng cách sử dụng các luồng và chuẩn bị các câu lệnh. Để chèn nội dung của tệp vào cột BLOB, bạn thực hiện theo các bước sau

  • Đầu tiên, mở tệp để đọc ở chế độ nhị phân
  • Thứ hai, xây dựng câu lệnh INSERT
  • Thứ ba, liên kết phần xử lý tệp với câu lệnh đã chuẩn bị bằng cách sử dụng phương thức  

    /** * PHP MySQL BLOB Demo */ class BlobDemo { const DB_HOST = 'localhost'; const DB_NAME = 'classicmodels'; const DB_USER = 'root'; const DB_PASSWORD = ''; /** * Open the database connection */ public function __construct() { // open database connection $conStr = sprintf("mysql:host=%s;dbname=%s;charset=utf8", self::DB_HOST, self::DB_NAME); try { $this->pdo = new PDO($conStr, self::DB_USER, self::DB_PASSWORD); //for prior PHP 5.3.6 //$conn->exec("set names utf8"); } catch (PDOException $e) { echo $e->getMessage(); } } /** * close the database connection */ public function __destruct() { // close the database connection $this->pdo = null; } }

    Code language: PHP (php)
    8 và gọi phương thức 

    /** * PHP MySQL BLOB Demo */ class BlobDemo { const DB_HOST = 'localhost'; const DB_NAME = 'classicmodels'; const DB_USER = 'root'; const DB_PASSWORD = ''; /** * Open the database connection */ public function __construct() { // open database connection $conStr = sprintf("mysql:host=%s;dbname=%s;charset=utf8", self::DB_HOST, self::DB_NAME); try { $this->pdo = new PDO($conStr, self::DB_USER, self::DB_PASSWORD); //for prior PHP 5.3.6 //$conn->exec("set names utf8"); } catch (PDOException $e) { echo $e->getMessage(); } } /** * close the database connection */ public function __destruct() { // close the database connection $this->pdo = null; } }

    Code language: PHP (php)
    9 để thực hiện truy vấn

Xem phương pháp 

INSERT INTO b_table
		VALUES(1, LOAD_FILE('d:/sample.txt'))
60 sau đây

INSERT INTO b_table
		VALUES(1, LOAD_FILE('d:/sample.txt'))
6

Lưu ý rằng 

INSERT INTO b_table
		VALUES(1, LOAD_FILE('d:/sample.txt'))
61 hướng dẫn PDO ánh xạ dữ liệu dưới dạng luồng

Cập nhật cột BLOB hiện có

Để cập nhật cột BLOB, bạn sử dụng kỹ thuật tương tự như được mô tả trong việc chèn dữ liệu vào cột BLOB. Xem phương pháp 

INSERT INTO b_table
		VALUES(1, LOAD_FILE('d:/sample.txt'))
62 sau đây

INSERT INTO b_table
		VALUES(1, X'848016608498FE15C6050001000006020007002E000005E84501960844CFF15C6050001000006020008002E000405E84D002608498FE15C6050001000006350800020000002E0001000000FF0000002000200005E8440026084C0FD15C60500014002');
0

Truy vấn dữ liệu từ cột BLOB

Các bước sau mô tả cách chọn dữ liệu từ cột BLOB

  • Đầu tiên, xây dựng một câu lệnh SELECT
  • Thứ hai, liên kết tham số tương ứng bằng phương thức 
    INSERT INTO b_table
    		VALUES(1, LOAD_FILE('d:/sample.txt'))
    
    63 của đối tượng
    INSERT INTO b_table
    		VALUES(1, LOAD_FILE('d:/sample.txt'))
    
    64
  • Thứ ba, thực hiện tuyên bố

Xem phương pháp 

INSERT INTO b_table
		VALUES(1, LOAD_FILE('d:/sample.txt'))
65 sau đây

INSERT INTO b_table
		VALUES(1, X'848016608498FE15C6050001000006020007002E000005E84501960844CFF15C6050001000006020008002E000405E84D002608498FE15C6050001000006350800020000002E0001000000FF0000002000200005E8440026084C0FD15C60500014002');
4

Các ví dụ PHP MySQL BLOB

Trong các ví dụ sau, chúng ta sẽ sử dụng lớp

/** * PHP MySQL BLOB Demo */ class BlobDemo { const DB_HOST = 'localhost'; const DB_NAME = 'classicmodels'; const DB_USER = 'root'; const DB_PASSWORD = ''; /** * Open the database connection */ public function __construct() { // open database connection $conStr = sprintf("mysql:host=%s;dbname=%s;charset=utf8", self::DB_HOST, self::DB_NAME); try { $this->pdo = new PDO($conStr, self::DB_USER, self::DB_PASSWORD); //for prior PHP 5.3.6 //$conn->exec("set names utf8"); } catch (PDOException $e) { echo $e->getMessage(); } } /** * close the database connection */ public function __destruct() { // close the database connection $this->pdo = null; } }

Code language: PHP (php)
5 để lưu ảnh GIF và tệp PDF vào cột BLOB của bảng

/** * PHP MySQL BLOB Demo */ class BlobDemo { const DB_HOST = 'localhost'; const DB_NAME = 'classicmodels'; const DB_USER = 'root'; const DB_PASSWORD = ''; /** * Open the database connection */ public function __construct() { // open database connection $conStr = sprintf("mysql:host=%s;dbname=%s;charset=utf8", self::DB_HOST, self::DB_NAME); try { $this->pdo = new PDO($conStr, self::DB_USER, self::DB_PASSWORD); //for prior PHP 5.3.6 //$conn->exec("set names utf8"); } catch (PDOException $e) { echo $e->getMessage(); } } /** * close the database connection */ public function __destruct() { // close the database connection $this->pdo = null; } }

Code language: PHP (php)
2

PHP MySQL BLOB với các tệp hình ảnh

Đầu tiên, chúng tôi chèn dữ liệu nhị phân từ tệp

INSERT INTO b_table
		VALUES(1, LOAD_FILE('d:/sample.txt'))
68 vào cột BLOB của bảng

/** * PHP MySQL BLOB Demo */ class BlobDemo { const DB_HOST = 'localhost'; const DB_NAME = 'classicmodels'; const DB_USER = 'root'; const DB_PASSWORD = ''; /** * Open the database connection */ public function __construct() { // open database connection $conStr = sprintf("mysql:host=%s;dbname=%s;charset=utf8", self::DB_HOST, self::DB_NAME); try { $this->pdo = new PDO($conStr, self::DB_USER, self::DB_PASSWORD); //for prior PHP 5.3.6 //$conn->exec("set names utf8"); } catch (PDOException $e) { echo $e->getMessage(); } } /** * close the database connection */ public function __destruct() { // close the database connection $this->pdo = null; } }

Code language: PHP (php)
2 như sau

INSERT INTO b_table
		VALUES(1, X'848016608498FE15C6050001000006020007002E000005E84501960844CFF15C6050001000006020008002E000405E84D002608498FE15C6050001000006350800020000002E0001000000FF0000002000200005E8440026084C0FD15C60500014002');
9
Dữ liệu BLOB trong MySQL là gì?
Dữ liệu BLOB trong MySQL là gì?

Sau đó, chúng ta có thể chọn dữ liệu BLOB và hiển thị dưới dạng ảnh GIF.

UPDATE
	b_table
SET
	file_data = LOAD_FILE('d:/sample.txt')
WHERE
	id = 1;
0
Dữ liệu BLOB trong MySQL là gì?
Dữ liệu BLOB trong MySQL là gì?

PHP MySQL BLOB với tệp PDF

Đoạn mã sau chèn nội dung của tệp 

INSERT INTO b_table
		VALUES(1, X'848016608498FE15C6050001000006020007002E000005E84501960844CFF15C6050001000006020008002E000405E84D002608498FE15C6050001000006350800020000002E0001000000FF0000002000200005E8440026084C0FD15C60500014002');
00 PDF vào cột BLOB

UPDATE
	b_table
SET
	file_data = LOAD_FILE('d:/sample.txt')
WHERE
	id = 1;
2
Dữ liệu BLOB trong MySQL là gì?
Dữ liệu BLOB trong MySQL là gì?

Sau đó, chúng ta có thể chọn dữ liệu PDF và hiển thị nó trong trình duyệt web như sau.

UPDATE
	b_table
SET
	file_data = LOAD_FILE('d:/sample.txt')
WHERE
	id = 1;
3
Dữ liệu BLOB trong MySQL là gì?
Dữ liệu BLOB trong MySQL là gì?

Để thay thế tệp PDF bằng tệp ảnh GIF, bạn sử dụng phương pháp 

INSERT INTO b_table
		VALUES(1, LOAD_FILE('d:/sample.txt'))
62 như sau.

UPDATE
	b_table
SET
	file_data = LOAD_FILE('d:/sample.txt')
WHERE
	id = 1;
5

Bạn có thể tải xuống mã nguồn của hướng dẫn này qua liên kết sau

Tải xuống mã nguồn PHP MySQL BLOB

Trong hướng dẫn này, chúng tôi đã chỉ cho bạn cách quản lý dữ liệu MySQL BLOB, bao gồm chèn, cập nhật và truy vấn blob

Tại sao nên sử dụng BLOB trong MySQL?

Đây là nơi xuất hiện kiểu dữ liệu BLOB của MySQL. Phương pháp lập trình này loại bỏ nhu cầu tạo một hệ thống tệp riêng để lưu trữ hình ảnh . Lược đồ này cũng tập trung hóa cơ sở dữ liệu, làm cho cơ sở dữ liệu di động và an toàn hơn vì dữ liệu được tách biệt khỏi hệ thống tệp.

Dữ liệu blob để làm gì?

BLOB dùng để làm gì? . Bởi vì BLOB được sử dụng để lưu trữ các tệp đa phương tiện, chúng thường là những phần dữ liệu lớn, lên tới vài gigabyte. to store unstructured data files. Because BLOBs are used to store multimedia files, they are often large pieces of data, up to several gigabytes.

Kiểu dữ liệu blob là gì?

BLOB (đối tượng lớn nhị phân) là một chuỗi nhị phân có độ dài khác nhau có thể dài tới 2.147.483.647 ký tự . Giống như các loại nhị phân khác, chuỗi BLOB không được liên kết với trang mã. Ngoài ra, các chuỗi BLOB không chứa dữ liệu ký tự.

Sự khác biệt giữa kiểu dữ liệu BLOB và TEXT trong MySQL là gì?

BLOB được sử dụng để lưu trữ dữ liệu nhị phân trong khi Văn bản được sử dụng để lưu trữ chuỗi lớn. Các giá trị BLOB được coi là chuỗi nhị phân (chuỗi byte). Chúng không có bộ ký tự, việc sắp xếp và so sánh dựa trên giá trị số của byte trong giá trị cột. Giá trị TEXT được coi là chuỗi không nhị phân (chuỗi ký tự)