11.3.4 & nbsp; các loại Blob và văn bản
Một BLOB
là một đối tượng lớn nhị phân có thể chứa một lượng dữ liệu khác nhau. Bốn loại BLOB
là TINYBLOB
, BLOB
, MEDIUMBLOB
và LONGBLOB
. Chúng chỉ khác nhau về độ dài tối đa của các giá trị mà chúng có thể giữ. Bốn loại TEXT
là TINYTEXT
, TEXT
, BLOB
0 và BLOB
1. Chúng tương ứng với bốn loại BLOB
và có cùng độ dài tối đa và yêu cầu lưu trữ. Xem Phần & NBSP; 11.7, Yêu cầu lưu trữ kiểu dữ liệu.
Các giá trị BLOB
được coi là chuỗi nhị phân [chuỗi byte]. Chúng có bộ và đối chiếu ký tự BLOB
4, và so sánh và sắp xếp dựa trên các giá trị số của byte trong các giá trị cột. Các giá trị TEXT
được coi là chuỗi không phải là chuỗi [chuỗi ký tự]. Chúng có một bộ ký tự khác với BLOB
4 và các giá trị được sắp xếp và so sánh dựa trên sự đối chiếu của bộ ký tự.
Nếu chế độ SQL nghiêm ngặt không được bật và bạn gán giá trị cho cột BLOB
hoặc TEXT
vượt quá độ dài tối đa của cột, giá trị bị cắt ngắn để phù hợp và cảnh báo được tạo ra. Đối với việc cắt ngắn các ký tự không gian không gian, bạn có thể gây ra lỗi xảy ra [thay vì cảnh báo] và triệt tiêu chèn giá trị bằng cách sử dụng chế độ SQL nghiêm ngặt. Xem Phần & NBSP; 5.1.11, Chế độ SQL Server SQL.
Cắt ngắn các khoảng trống vượt quá từ các giá trị được chèn vào các cột TEXT
luôn tạo ra một cảnh báo, bất kể chế độ SQL.
Đối với các cột TEXT
và BLOB
, không có phần đệm trên chèn và không có byte nào bị tước bỏ chọn.
Nếu cột TEXT
được lập chỉ mục, so sánh mục nhập chỉ mục được gắn không gian ở cuối. Điều này có nghĩa là, nếu chỉ mục yêu cầu các giá trị duy nhất, các lỗi khóa trùng lặp xảy ra đối với các giá trị chỉ khác nhau về số lượng không gian dấu vết. Ví dụ: nếu một bảng chứa BLOB
3, một nỗ lực lưu trữ BLOB
4 gây ra lỗi khóa trùng lặp. Điều này không đúng với các cột BLOB
.
Trong hầu hết các khía cạnh, bạn có thể coi cột BLOB
là cột BLOB
7 có thể lớn như bạn muốn. Tương tự, bạn có thể coi cột TEXT
là cột BLOB
9. BLOB
và TEXT
khác với BLOB
7 và BLOB
9 theo các cách sau:
Đối với các chỉ mục trên các cột
BLOB
vàTEXT
, bạn phải chỉ định độ dài tiền tố chỉ mục. Đối vớiTINYBLOB
6 vàBLOB
9, độ dài tiền tố là tùy chọn. Xem Phần & NBSP; 8.3.5, Chỉ mục cột của người dùng.Các cột
BLOB
vàTEXT
không thể có các giá trịBLOB
0.
Nếu bạn sử dụng thuộc tính BLOB
1 với kiểu dữ liệu TEXT
, cột được gán đối chiếu nhị phân [BLOB
3] của bộ ký tự cột.
BLOB
4 và BLOB
5 Bản đồ cho kiểu dữ liệu BLOB
0. Đây là một tính năng tương thích.
Trình kết nối MySQL/ODBC định nghĩa các giá trị BLOB
là các giá trị BLOB
8 và TEXT
là MEDIUMBLOB
0.
Bởi vì các giá trị BLOB
và TEXT
có thể cực kỳ dài, bạn có thể gặp phải một số ràng buộc khi sử dụng chúng:
Chỉ các byte
MEDIUMBLOB
3 đầu tiên của cột được sử dụng khi sắp xếp. Giá trị mặc định củaMEDIUMBLOB
3 là 1024. Bạn có thể tạo ra nhiều byte hơn trong việc sắp xếp hoặc nhóm bằng cách tăng giá trị củaMEDIUMBLOB
3 khi khởi động máy chủ hoặc thời gian chạy. Bất kỳ máy khách nào cũng có thể thay đổi giá trị của biếnMEDIUMBLOB
3 của nó:mysql> SET max_sort_length = 2000; mysql> SELECT id, comment FROM t -> ORDER BY comment;
Các phiên bản của các cột
BLOB
hoặcTEXT
do kết quả truy vấn được xử lý bằng cách sử dụng bảng tạm thời khiến máy chủ sử dụng bảng trên đĩa thay vì trong bộ nhớ vì công cụ lưu trữMEDIUMBLOB
9 không hỗ trợ các loại dữ liệu đó [xem Phần & NBSP; 8.4.4 , Sử dụng bảng tạm thời nội bộ trong MySQL,]. Việc sử dụng đĩa bị phạt hiệu suất, do đó, bao gồm các cộtBLOB
hoặcTEXT
trong kết quả truy vấn chỉ khi chúng thực sự cần thiết. Ví dụ: tránh sử dụngLONGBLOB
2, chọn tất cả các cột.Kích thước tối đa của đối tượng
BLOB
hoặcTEXT
được xác định bởi loại của nó, nhưng giá trị lớn nhất mà bạn thực sự có thể truyền giữa máy khách và máy chủ được xác định bởi lượng bộ nhớ có sẵn và kích thước của bộ đệm liên lạc. Bạn có thể thay đổi kích thước bộ đệm thông báo bằng cách thay đổi giá trị của biếnLONGBLOB
5, nhưng bạn phải làm như vậy cho cả máy chủ và chương trình khách hàng của bạn. Ví dụ: cả MySQL và MySQLDump đều cho phép bạn thay đổi giá trịLONGBLOB
5 phía máy khách. Xem Phần & NBSP; 5.1.1, Định cấu hình máy chủ, Phần & NBSP; 4.5.1, MYSQL-Máy khách dòng lệnh MySQL và Phần & NBSP; 4.5.4, MySQLDUMP-một chương trình sao lưu cơ sở dữ liệu. Bạn cũng có thể muốn so sánh kích thước gói và kích thước của các đối tượng dữ liệu bạn đang lưu trữ với các yêu cầu lưu trữ, xem Phần & NBSP; 11.7, Yêu cầu lưu trữ kiểu dữ liệu của Hồimysql and mysqldump enable you to change the client-sideLONGBLOB
5 value. See Section 5.1.1, “Configuring the Server”, Section 4.5.1, “mysql — The MySQL Command-Line Client”, and Section 4.5.4, “mysqldump — A Database Backup Program”. You may also want to compare the packet sizes and the size of the data objects you are storing with the storage requirements, see Section 11.7, “Data Type Storage Requirements”
Mỗi giá trị BLOB
hoặc TEXT
được biểu thị bên trong bằng một đối tượng được phân bổ riêng.Điều này trái ngược với tất cả các loại dữ liệu khác, trong đó lưu trữ được phân bổ một lần trên mỗi cột khi bảng được mở.
Trong một số trường hợp, có thể mong muốn lưu trữ dữ liệu nhị phân như các tệp phương tiện trong các cột BLOB
hoặc TEXT
.Bạn có thể thấy các chức năng xử lý chuỗi của MySQL hữu ích để làm việc với dữ liệu đó.Xem Phần & NBSP; 12.8, Chức năng Chuỗi và toán tử.Đối với bảo mật và các lý do khác, thường nên sử dụng mã ứng dụng thay vì cung cấp cho người dùng ứng dụng đặc quyền TEXT
1.Bạn có thể thảo luận về các chi tiết cụ thể cho các ngôn ngữ và nền tảng khác nhau trong các diễn đàn MySQL [//forums.mysql.com/].