Theo tài liệu trực tuyến , có giới hạn hàng 64K và bạn có thể tính ra kích thước hàng bằng cách sử dụng:
row length = 1
+ (sum of column lengths)
+ (number of NULL columns + delete_flag + 7)/8
+ (number of variable-length columns)
Bạn cần lưu ý rằng độ dài cột không phải là ánh xạ một-một của kích thước của chúng. Ví dụ: CHAR(10) CHARACTER SET utf8
yêu cầu ba byte cho mỗi mười ký tự vì mã hóa cụ thể đó phải tính đến thuộc tính ba byte cho mỗi ký tự của utf8
(đó là utf8
mã hóa của MySQL chứ không phải UTF-8 "thực", có thể có tới bốn byte ).
Nhưng, nếu kích thước hàng của bạn đạt gần 64K, bạn có thể muốn kiểm tra lược đồ của cơ sở dữ liệu của mình. Đó là một bảng hiếm cần rộng đến mức trong cơ sở dữ liệu được thiết lập đúng (3NF) - có thể, chỉ là không phổ biến lắm.
Nếu bạn muốn sử dụng nhiều hơn thế, bạn có thể sử dụng BLOB
hoặcTEXT
các loại. Chúng không được tính theo giới hạn 64K của hàng (trừ dấu chân hành chính nhỏ) nhưng bạn cần lưu ý các vấn đề khác xuất phát từ việc sử dụng chúng, chẳng hạn như không thể sắp xếp sử dụng toàn bộ khối văn bản vượt quá một số nhất định của các ký tự (mặc dù điều này có thể được cấu hình lên trên), buộc các bảng tạm thời nằm trên đĩa thay vì trong bộ nhớ hoặc phải định cấu hình bộ đệm máy khách và máy chủ để xử lý các kích thước một cách hiệu quả.
Các kích thước được phép là:
TINYTEXT 255 (+1 byte overhead)
TEXT 64K - 1 (+2 bytes overhead)
MEDIUMTEXT 16M - 1 (+3 bytes overhead)
LONGTEXT 4G - 1 (+4 bytes overhead)
Bạn vẫn có sự không phù hợp byte / ký tự (để một MEDIUMTEXT utf8
cột có thể lưu trữ "chỉ" khoảng nửa triệu ký tự, (16M-1)/3 = 5,592,405
) nhưng nó vẫn mở rộng đáng kể phạm vi của bạn.