Câu trả lời:
Tối đa dung lượng là 2 gigabyte không gian - vì vậy bạn đang xem chỉ hơn 1 tỷ ký tự 2 byte sẽ vừa với một NVARCHAR(MAX)
trường.
Sử dụng các con số chi tiết hơn của câu trả lời khác, bạn sẽ có thể lưu trữ
(2 ^ 31 - 1 - 2) / 2 = 1'073'741'822 double-byte characters
1 billion, 73 million, 741 thousand and 822 characters to be precise
trong NVARCHAR(MAX)
cột của bạn (rất tiếc, nửa ký tự cuối cùng đó bị lãng phí ...)
Cập nhật: như @MartinMulder đã chỉ ra: bất kỳ cột ký tự có độ dài thay đổi nào cũng có chi phí 2 byte để lưu trữ độ dài thực - vì vậy tôi cần trừ thêm hai byte từ 2 ^ 31 - 1
độ dài mà tôi đã quy định trước đó - do đó bạn có thể lưu trữ 1 ký tự Unicode ít hơn Tôi đã tuyên bố trước đây.
VARCHAR(MAX)
, nếu bạn không cần hỗ trợ 2 byte cho các ngôn ngữ Châu Á, Ả Rập hoặc Kirin. Sử dụng (N)VARCHAR(x)
nếu bạn biết một chuỗi sẽ không bao giờ dài hơn ký tự x (không sử dụng NVARCHAR(MAX)
cho một tên đầu tiên - sử dụng NVARCHAR(50)
hoặc bất cứ điều gì có ý nghĩa đối với bạn)
Từ char và varchar (Transact-SQL)
varchar [(n | max)]
Dữ liệu ký tự có độ dài thay đổi, không phải Unicode. n có thể là giá trị từ 1 đến 8.000. max chỉ ra rằng kích thước lưu trữ tối đa là 2 ^ 31-1 byte. Kích thước lưu trữ là độ dài thực tế của dữ liệu được nhập + 2 byte. Dữ liệu được nhập có thể có độ dài 0 ký tự. Các từ đồng nghĩa ISO cho varchar là thay đổi ký tự hoặc ký tự khác nhau.
2 ^ 31-1 byte. Vì vậy, ít hơn một chút 2 ^ 31-1 ký tự cho varchar (tối đa) và một nửa ký tự cho nvarchar (tối đa).