Bằng cách sử dụng, VARCHAR(MAX)
về cơ bản bạn đang nói với SQL Server "lưu trữ các giá trị trong trường này theo cách bạn thấy tốt nhất", SQL Server sau đó sẽ chọn lưu trữ các giá trị dưới dạng thông thường VARCHAR
hay dưới dạng LOB (Đối tượng lớn). Nói chung, nếu các giá trị được lưu trữ nhỏ hơn 8.000 byte, SQL Server sẽ coi các giá trị là một VARCHAR
loại thông thường .
Nếu các giá trị được lưu trữ quá lớn thì cột được phép tràn ra ngoài trang trong để trang LOB, chính xác như họ làm với nhiều loại LOB khác ( text
, ntext
và image
) - nếu điều này xảy ra thì trang thêm nội dung đã được yêu cầu phải đọc dữ liệu lưu trữ trong các trang bổ sung (tức là có một phần trình diễn), tuy nhiên điều này chỉ xảy ra nếu các giá trị được lưu trữ quá lớn .
Trên thực tế, trong SQL Server 2008 hoặc mới hơn, dữ liệu có thể tràn sang các trang bổ sung ngay cả với các kiểu dữ liệu có độ dài cố định (ví dụ VARCHAR(3,000)
), tuy nhiên các trang này được gọi là trang dữ liệu tràn hàng và được xử lý hơi khác.
Phiên bản ngắn: từ góc độ lưu trữ, không có bất lợi khi sử dụng VARCHAR(MAX)
hết VARCHAR(N)
đối với một số người N
.
(Lưu ý rằng điều này cũng áp dụng cho các loại trường có độ dài thay đổi khác NVARCHAR
và VARBINARY
)
FYI - Bạn không thể tạo chỉ mục trên VARCHAR(MAX)
các cột