Hướng dẫn mysql object data type - kiểu dữ liệu đối tượng mysql

Các yêu cầu lưu trữ cho dữ liệu bảng trên đĩa phụ thuộc vào một số yếu tố. Các công cụ lưu trữ khác nhau đại diện cho các loại dữ liệu và lưu trữ dữ liệu thô khác nhau. Dữ liệu bảng có thể được nén, cho một cột hoặc toàn bộ hàng, làm phức tạp việc tính toán các yêu cầu lưu trữ cho bảng hoặc cột.

Mặc dù có sự khác biệt trong bố cục lưu trữ trên đĩa, API MySQL nội bộ giao tiếp và trao đổi thông tin về các hàng bảng sử dụng cấu trúc dữ liệu nhất quán áp dụng trên tất cả các công cụ lưu trữ.

Phần này bao gồm các hướng dẫn và thông tin cho các yêu cầu lưu trữ cho từng loại dữ liệu được MySQL hỗ trợ, bao gồm định dạng và kích thước nội bộ cho các công cụ lưu trữ sử dụng biểu diễn kích thước cố định cho các loại dữ liệu. Thông tin được liệt kê theo danh mục hoặc công cụ lưu trữ.

Biểu diễn bên trong của bảng có kích thước hàng tối đa là 65.535 byte, ngay cả khi công cụ lưu trữ có khả năng hỗ trợ các hàng lớn hơn. Hình này không bao gồm các cột BLOB hoặc TEXT, chỉ đóng góp 9 đến 12 byte cho kích thước này. Đối với dữ liệu BLOBTEXT, thông tin được lưu trữ bên trong trong một khu vực khác của bộ nhớ so với bộ đệm hàng. Các công cụ lưu trữ khác nhau xử lý việc phân bổ và lưu trữ dữ liệu này theo các cách khác nhau, theo phương pháp họ sử dụng để xử lý các loại tương ứng. Để biết thêm thông tin, hãy xem Chương & NBSP; 16, Công cụ lưu trữ thay thế và Phần & NBSP; 8.4.7, Giới hạn trên bảng số cột và kích thước hàng.

Yêu cầu lưu trữ bảng NDB

Yêu cầu lưu trữ loại số

Yêu cầu lưu trữ ngày và loại thời gian4-byte alignment; all NDB data storage is done in multiples of 4 bytes. Thus, a column value that would typically take 15 bytes requires 16 bytes in an NDB table. For example, in NDB tables, the TINYINT, SMALLINT, TEXT0, and TEXT1 (TEXT2) column types each require 4 bytes storage per record due to the alignment factor.

Yêu cầu lưu trữ loại chuỗinot 4-byte aligned, NDB reserves 4 bytes (32 bits) per row for the first 1-32 bits needed for TEXT5 columns, then another 4 bytes for bits 33-64, and so on.

Yêu cầu lưu trữ loại không gian

Yêu cầu lưu trữ JSONhidden primary key is created by NDB. This hidden primary key consumes 31-35 bytes per table record.

Các yêu cầu lưu trữ cho dữ liệu bảng trên đĩa phụ thuộc vào một số yếu tố. Các công cụ lưu trữ khác nhau đại diện cho các loại dữ liệu và lưu trữ dữ liệu thô khác nhau. Dữ liệu bảng có thể được nén, cho một cột hoặc toàn bộ hàng, làm phức tạp việc tính toán các yêu cầu lưu trữ cho bảng hoặc cột.ndb_size.pl Perl script to estimate NDB storage requirements. It connects to a current MySQL (not NDB Cluster) database and creates a report on how much space that database would require if it used the NDB storage engine. See Section 23.5.28, “ndb_size.pl — NDBCLUSTER Size Requirement Estimator” for more information.

Yêu cầu lưu trữ loại số

Yêu cầu lưu trữ ngày và loại thời gianYêu cầu lưu trữ loại chuỗi
Yêu cầu lưu trữ loại không gianYêu cầu lưu trữ JSON
Các yêu cầu lưu trữ cho dữ liệu bảng trên đĩa phụ thuộc vào một số yếu tố. Các công cụ lưu trữ khác nhau đại diện cho các loại dữ liệu và lưu trữ dữ liệu thô khác nhau. Dữ liệu bảng có thể được nén, cho một cột hoặc toàn bộ hàng, làm phức tạp việc tính toán các yêu cầu lưu trữ cho bảng hoặc cột. Mặc dù có sự khác biệt trong bố cục lưu trữ trên đĩa, API MySQL nội bộ giao tiếp và trao đổi thông tin về các hàng bảng sử dụng cấu trúc dữ liệu nhất quán áp dụng trên tất cả các công cụ lưu trữ.
Phần này bao gồm các hướng dẫn và thông tin cho các yêu cầu lưu trữ cho từng loại dữ liệu được MySQL hỗ trợ, bao gồm định dạng và kích thước nội bộ cho các công cụ lưu trữ sử dụng biểu diễn kích thước cố định cho các loại dữ liệu. Thông tin được liệt kê theo danh mục hoặc công cụ lưu trữ. Biểu diễn bên trong của bảng có kích thước hàng tối đa là 65.535 byte, ngay cả khi công cụ lưu trữ có khả năng hỗ trợ các hàng lớn hơn. Hình này không bao gồm các cột BLOB hoặc TEXT, chỉ đóng góp 9 đến 12 byte cho kích thước này. Đối với dữ liệu BLOBTEXT, thông tin được lưu trữ bên trong trong một khu vực khác của bộ nhớ so với bộ đệm hàng. Các công cụ lưu trữ khác nhau xử lý việc phân bổ và lưu trữ dữ liệu này theo các cách khác nhau, theo phương pháp họ sử dụng để xử lý các loại tương ứng. Để biết thêm thông tin, hãy xem Chương & NBSP; 16, Công cụ lưu trữ thay thế và Phần & NBSP; 8.4.7, Giới hạn trên bảng số cột và kích thước hàng.
Quan trọng NDB Bảng sử dụng căn chỉnh 4 byte; Tất cả lưu trữ dữ liệu NDB được thực hiện theo bội số của 4 byte. Do đó, một giá trị cột thường mất 15 byte yêu cầu 16 byte trong bảng NDB. Ví dụ: trong các bảng NDB, các loại cột TINYINT, SMALLINT, TEXT0 và TEXT1 (TEXT2), mỗi loại yêu cầu lưu trữ 4 byte trên mỗi bản ghi do hệ số căn chỉnh.
Mỗi cột TEXT3) lấy TEXT4 bit của không gian lưu trữ. Mặc dù một cột TEXT5 riêng lẻ không được căn chỉnh 4 byte, NDB dự trữ 4 byte (32 bit) mỗi hàng cho 1-32 bit đầu tiên cần thiết cho các cột TEXT5, sau đó 4 byte khác cho bit 33-64, v.v. Mặc dù bản thân A .
Mỗi bảng sử dụng công cụ lưu trữ NDB yêu cầu khóa chính; Nếu bạn không định nghĩa một khóa chính, một khóa chính ẩn của Google được tạo bởi NDB. Khóa chính ẩn này tiêu thụ 31-35 byte cho mỗi bản ghi bảng. Bạn có thể sử dụng tập lệnh ndb_size.pl perl để ước tính các yêu cầu lưu trữ NDB. Nó kết nối với cơ sở dữ liệu MySQL (không phải cụm NDB) hiện tại và tạo báo cáo về lượng không gian mà cơ sở dữ liệu sẽ yêu cầu nếu sử dụng công cụ lưu trữ NDB. Xem Phần & NBSP; 23.5.28, ND NDB_SIZE.PL - Công cụ ước tính yêu cầu kích thước NDBCluster để biết thêm thông tin.
Loại dữ liệu NDB Bảng sử dụng căn chỉnh 4 byte; Tất cả lưu trữ dữ liệu NDB được thực hiện theo bội số của 4 byte. Do đó, một giá trị cột thường mất 15 byte yêu cầu 16 byte trong bảng NDB. Ví dụ: trong các bảng NDB, các loại cột TINYINT, SMALLINT, TEXT0 và TEXT1 (TEXT2), mỗi loại yêu cầu lưu trữ 4 byte trên mỗi bản ghi do hệ số căn chỉnh.
Mỗi cột TEXT3) lấy TEXT4 bit của không gian lưu trữ. Mặc dù một cột TEXT5 riêng lẻ không được căn chỉnh 4 byte, NDB dự trữ 4 byte (32 bit) mỗi hàng cho 1-32 bit đầu tiên cần thiết cho các cột TEXT5, sau đó 4 byte khác cho bit 33-64, v.v. Mặc dù bản thân A .
Mỗi bảng sử dụng công cụ lưu trữ NDB yêu cầu khóa chính; Nếu bạn không định nghĩa một khóa chính, một khóa chính ẩn của Google được tạo bởi NDB. Khóa chính ẩn này tiêu thụ 31-35 byte cho mỗi bản ghi bảng., NUMERIC(TEXT4,NDB1) Bạn có thể sử dụng tập lệnh ndb_size.pl perl để ước tính các yêu cầu lưu trữ NDB. Nó kết nối với cơ sở dữ liệu MySQL (không phải cụm NDB) hiện tại và tạo báo cáo về lượng không gian mà cơ sở dữ liệu sẽ yêu cầu nếu sử dụng công cụ lưu trữ NDB. Xem Phần & NBSP; 23.5.28, ND NDB_SIZE.PL - Công cụ ước tính yêu cầu kích thước NDBCluster để biết thêm thông tin.
Loại dữ liệuCần lưu trữ

________số 8leftover digits require some fraction of four bytes. The storage required for excess digits is given by the following table.

1 byteSMALLINT
0 0
1 1
2 1
3 2
4 2
5 3
6 3
7 4
8 4

Yêu cầu lưu trữ ngày và loại thời gian

2 byte

Yêu cầu lưu trữ ngày và loại thời gianYêu cầu lưu trữ loại chuỗiYêu cầu lưu trữ kể từ MySQL 5.6.4
NDB11 byte1 byte
NDB23 byte3 byte
NDB83 byte3 byte + lưu trữ giây phân đoạn
NDB98 byte5 byte + lưu trữ giây phân số
NDB04 byte4 byte + lưu trữ giây phân đoạn

Kể từ MySQL 5.6.4, lưu trữ cho NDB1 và NDB2 vẫn không thay đổi. Tuy nhiên, NDB8, NDB9 và NDB0 được thể hiện khác nhau. NDB9 được đóng gói hiệu quả hơn, yêu cầu 5 thay vì 8 byte cho phần không phân hủy và cả ba phần đều có một phần phân đoạn yêu cầu từ 0 đến 3 byte, tùy thuộc vào độ chính xác của phần hai của các giá trị được lưu trữ.

Độ chính xác giây phân sốCần lưu trữ
0 0 byte
1, 21 byte
3, 42 byte
5, 63 byte

3 byte + lưu trữ giây phân đoạn

8 byte

5 byte + lưu trữ giây phân số

4 byte

4 byte + lưu trữ giây phân đoạnCần lưu trữ
CHAR(TEXT4) 0 byte<= TEXT4 <= 255, where NDB2 is the number of bytes required for the maximum-length character in the character set.
BINARY(TEXT4) 1, 2<= TEXT4 <= 255
3, 4, VARBINARY(TEXT4) 2 byte
5, 6 Ví dụ: NDB2, NDB3, NDB4 và NDB5 lần lượt sử dụng 3, 4, 5 và 6 byte. NDB8 và NDB2 tương đương và yêu cầu lưu trữ giống nhau.
Để biết chi tiết về biểu diễn nội bộ của các giá trị thời gian, hãy xem Internals MySQL: Các thuật toán và cấu trúc quan trọng.Yêu cầu lưu trữ loại chuỗi
Trong bảng sau, TEXT4 đại diện cho độ dài cột được khai báo trong các ký tự cho các loại chuỗi và byte không phân biệt cho các loại chuỗi nhị phân. NDB9 đại diện cho độ dài thực tế trong byte của một giá trị chuỗi đã cho.Loại dữ liệu
Họ nhỏ gọn của các định dạng hàng innodb tối ưu hóa lưu trữ cho các bộ ký tự có độ dài thay đổi. Xem các đặc điểm lưu trữ định dạng hàng nhỏ gọn. Nếu không, TEXT4 × NDB2 byte,TEXT4 byte, 0
Varchar (________ 14), varbinary (____ 14)NDB9 + 1 byte Nếu các giá trị cột yêu cầu 0 - 255 byte, NDB9 + 2 byte nếu các giá trị có thể yêu cầu nhiều hơn 255 byte
TINYINT2, TINYINT3NDB9 + 1 byte, trong đó NDB9 <28

BLOB, TEXT

NDB9 + 2 byte, trong đó NDB9 <216

SMALLINT0, SMALLINT1

  • NDB9 + 3 byte, trong đó NDB9 <224

  • SMALLINT4, SMALLINT5

  • NDB9 + 4 byte, trong đó NDB9 <232

________ 98 ',' ________ 99 ', ...)

1 hoặc 2 byte, tùy thuộc vào số lượng giá trị liệt kê (tối đa 65,535 giá trị)bytes that can be stored in a TEXT06 or TEXT13 column is subject to the maximum row size of 65,535 bytes, which is shared among all columns. For a TEXT06 column that stores multibyte characters, the effective maximum number of characters is less. For example, TEXT09 characters can require up to four bytes per character, so a TEXT06 column that uses the TEXT09 character set can be declared to be a maximum of 16,383 characters. See Section 8.4.7, “Limits on Table Column Count and Row Size”.

TEXT29 mã hóa các trường có độ dài cố định lớn hơn hoặc bằng 768 byte có chiều dài như các trường có độ dài thay đổi, có thể được lưu trữ ngoài trang. Ví dụ, cột TEXT30 có thể vượt quá 768 byte nếu độ dài byte tối đa của bộ ký tự lớn hơn 3, như với TEXT09.

Công cụ lưu trữ NDB hỗ trợ các cột có chiều rộng thay đổi. Điều này có nghĩa là một cột TEXT06 trong bảng cụm NDB yêu cầu cùng một lượng lưu trữ như bất kỳ công cụ lưu trữ nào khác, ngoại trừ các giá trị đó được căn chỉnh 4 byte. Do đó, chuỗi TEXT19 được lưu trữ trong cột TEXT35 bằng cách sử dụng bộ ký tự TEXT17 yêu cầu 8 byte (thay vì 5 byte cho cùng một giá trị cột trong bảng TEXT37).

Các cột TEXT, BLOBTEXT40 được triển khai khác nhau trong công cụ lưu trữ NDB, trong đó mỗi hàng trong cột được tạo thành từ hai phần riêng biệt. Một trong số đó có kích thước cố định (256 byte cho TEXTBLOB, 4000 byte cho TEXT40) và thực sự được lưu trữ trong bảng gốc. Các loại khác bao gồm bất kỳ dữ liệu nào vượt quá 256 byte, được lưu trữ trong bảng các bộ phận Blob ẩn. Kích thước của các hàng trong bảng thứ hai này được xác định bởi loại chính xác của cột, như được hiển thị trong bảng sau:

Điều này có nghĩa là kích thước của cột TEXT là 256 nếu TEXT46

Không có bộ phận nào được lưu trữ riêng biệt bởi NDB cho các giá trị cột TINYINT2 hoặc TINYINT3.

Bạn có thể tăng kích thước của phần blob của cột Blob lên tối đa 13948 bằng cách sử dụng TEXT54 trong một bình luận cột khi tạo hoặc thay đổi bảng cha mẹ. Trong NDB 8.0.30 và sau đó, cũng có thể đặt kích thước nội tuyến cho cột TEXT, BLOB hoặc TEXT40, sử dụng TEXT58 trong một nhận xét cột. Xem các tùy chọn NDB_Column, để biết thêm thông tin.

Kích thước của một đối tượng TEXT59 được xác định bởi số lượng các giá trị liệt kê khác nhau. Một byte được sử dụng để liệt kê với tối đa 255 giá trị có thể. Hai byte được sử dụng để liệt kê có từ 256 đến 65,535 giá trị có thể. Xem phần & nbsp; 11.3.5, loại Enum loại.

Kích thước của một đối tượng TEXT60 được xác định bởi số lượng thành viên được đặt khác nhau. Nếu kích thước đặt là TEXT61, đối tượng chiếm (________ 161+7)/8 byte, được làm tròn lên đến 1, 2, 3, 4 hoặc 8 byte. Một TEXT60 có thể có tối đa 64 thành viên. Xem Phần & NBSP; 11.3.6, Loại SET loại.(TEXT61+7)/8 bytes, rounded up to 1, 2, 3, 4, or 8 bytes. A TEXT60 can have a maximum of 64 members. See Section 11.3.6, “The SET Type”.

Yêu cầu lưu trữ loại không gian

MySQL lưu trữ các giá trị hình học sử dụng 4 byte để chỉ ra SRID theo sau là biểu diễn WKB của giá trị. Hàm TEXT64 trả về không gian trong byte cần thiết để lưu trữ giá trị.

Để biết mô tả về WKB và các định dạng lưu trữ nội bộ cho các giá trị không gian, xem Phần & NBSP; 11.4.3, các định dạng dữ liệu không gian được hỗ trợ.

Yêu cầu lưu trữ JSON

Nói chung, yêu cầu lưu trữ cho cột TEXT40 xấp xỉ bằng cột SMALLINT4 hoặc SMALLINT5; Đó là, không gian được tiêu thụ bởi một tài liệu JSON gần giống với biểu diễn chuỗi của tài liệu được lưu trữ trong một cột của một trong các loại này. Tuy nhiên, có một chi phí được áp đặt bởi mã hóa nhị phân, bao gồm siêu dữ liệu và từ điển cần thiết để tra cứu, của các giá trị riêng lẻ được lưu trữ trong tài liệu JSON. Ví dụ, một chuỗi được lưu trữ trong tài liệu JSON yêu cầu lưu trữ bổ sung 4 đến 10 byte, tùy thuộc vào độ dài của chuỗi và kích thước của đối tượng hoặc mảng mà nó được lưu trữ.

Ngoài ra, MySQL áp đặt giới hạn về kích thước của bất kỳ tài liệu JSON nào được lưu trữ trong cột TEXT40 sao cho nó không thể lớn hơn giá trị của TEXT69.