Số ký tự tối đa mà nvarchar (MAX) sẽ chứa là bao nhiêu?


102

Tôi mới làm quen với khái niệm này nvarchar(MAX). Nó sẽ chứa bao nhiêu ký tự?

Câu trả lời:


155

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.


1
Chà ... vì vậy tôi đoán tôi không thực sự cần phải lo lắng về việc đặt quy tắc xác thực kích thước tối đa. Tuy nhiên, tốt hơn hết tôi nên cẩn thận khi sử dụng nvarchar (MAX).
quakkels

20
@quakkels: trừ khi bạn định xếp hạng Chiến tranh và Hòa bình của Tolstoi (khoảng 3,1 triệu ký tự) lên gần 350 lần - không, bạn sẽ không phải lo lắng về dung lượng :-) Và vì đó là loại VARCHAR / NVARCHAR, nó sẽ luôn luôn chỉ sử dụng như không gian nhiều càng cần thiết - không phải lo lắng về không gian lãng phí hoặc được đặt trước không cần thiết hoặc là ...
marc_s

2
có thật không? Thật tuyệt. Thật bất ngờ, bạn không muốn sử dụng nvarchar (MAX) trong trường hợp nào?
quakkels

5
@quakkels: sử dụng 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)
marc_s

1
Tôi vừa mới bắt đầu buổi sáng của mình hỏi tôi cùng một câu hỏi và cả hai câu trả lời của bạn đều gợi lên một nụ cười tươi trên khuôn mặt tôi. +1.
Matthis Kohli

11

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.


4

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).

nchar và nvarchar

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.