thể trùng lặp:
MySQL: Large VARCHAR vs. TEXT?Khi sử dụng TEXT trong mysql thay vì VARCHAR
Kể từ VARCHAR
thể có 65k byte bây giờ, khi đó nên TEXT
được sử dụng thay VARCHAR
?
thể trùng lặp:
MySQL: Large VARCHAR vs. TEXT?Khi sử dụng TEXT trong mysql thay vì VARCHAR
Kể từ VARCHAR
thể có 65k byte bây giờ, khi đó nên TEXT
được sử dụng thay VARCHAR
?
Dài VARCHAR
được lưu trữ theo cách tương tự như trường TEXT
/BLOB
trong InnoDB
.
Từ lưu trữ BLOB tiềm năng, TEXT như cũng như VARCHAR dài được xử lý cùng cách bởi InnoDB. Đây là lý do tại sao Innodb hướng dẫn sử dụng gọi nó là “cột dài” thay vì so với BLOB.
Trừ khi bạn cần để index các cột này (trong trường hợp này VARCHAR
là nhanh hơn nhiều) không có lý do để sử dụng VARCHAR
qua TEXT
cho các lĩnh vực dài - có một số optimisations cụ cơ trong MySQL
để điều chỉnh việc truy xuất dữ liệu theo độ dài và bạn nên sử dụng đúng loại cột để tận dụng lợi thế của các loại cột này.
Trong trường hợp bạn đang sử dụng MyISAM
một cuộc thảo luận chuyên sâu về chủ đề là here.
TEXT
và BLOB
được lưu trữ ra khỏi bàn với bảng chỉ có một con trỏ đến vị trí của lưu trữ thực tế.
VARCHAR
được lưu trữ nội tuyến bằng bảng. VARCHAR
nhanh hơn khi kích thước hợp lý.
Theo this test, VARCHAR
khoảng ba lần nhanh như văn bản.
Xác định "trường dài". –
@PaulBrewczynski> 768 byte (xem liên kết Lion posted) – delrox
Một sửa chữa cho InnoDB: TEXT và BLOB được lưu trữ ngoài bảng trong InnoDB chỉ khi "dài" (> 768 byte) và chỉ đuôi được lưu trữ ngoài bảng (tương tự tới VARCHAR). Sự khác biệt thực sự là độ dài tối đa khác nhau, và với VARCHAR bạn phải cung cấp độ dài tối đa (thực thi cùng với giới hạn hệ thống là 65k). – delrox
Văn bản nên được sử dụng cho các chuỗi dài thực sự không xác định. Ngoài ra, các truy vấn trả về các trường TEXT có xu hướng chậm hơn nhiều so với các đối tác VARCHAR của chúng.
Trong cơ sở dữ liệu của tôi, tôi có một cột có tên là Mô tả. Liệu kiểu dữ liệu có phải là VARCHAR hay TEXT không? Tôi không chắc chắn dữ liệu mô tả sẽ kéo dài trong bao lâu, nhưng tôi dự định đặt giới hạn số từ vào giao diện người dùng để nó có độ dài tối đa. – codeinprogress
Khi bạn cần nhiều hơn 65k ký tự. :) – GordonM
Đó phải là 65k * byte *, không phải ký tự, tôi nghĩ – davek
Ồ, vâng. 65k byte. Đã cập nhật câu hỏi của tôi. – enchance