VARCHAR VÀ NVARCHAR

ncharNAME _ với nvarcharNAME _ rất có thể tàng trữ ký tự Unicode .

Bạn đang xem: Varchar và nvarchar

charNAME _ cùng varcharNAME _ tất yêu tàng trữ các ký kết từ Unicode .charNAME _ cùng ncharNAME _ chiều nhiều năm cố định và thắt chặt đang không gian tàng trữ dự trữ đến con số cam kết từ các bạn hướng đẫn trong cả khi chúng ta không thực hiện không còn dung lượng kia.varcharNAME _ với nvarcharNAME _ độ nhiều năm biến hóa sẽ chỉ áp dụng khoảng chừng Trắng những nhân thứ các bạn tàng trữ. Nó sẽ không còn dự trữ bộ nhớ lưu trữ nlỗi charhoặc ncharname __ .

ncharvà nvarcharđã chiếm phần gấp đôi dung lượng lưu trữ, vì chưng vậy rất có thể là đúng đắn Khi chỉ sử dụng chúng nếu khách hàng cần Unicode .


795
6 thg 10, 2008Brian Kim
Tất cả những câu trả lời cho đến lúc này cho là varchar là byte đối kháng, nvarchar là byte kép. Phần thứ nhất đích thực này nhờ vào vào đối chiế như minch họa bên dưới.

DECLARE
T TABLE(C1 VARCHAR(20) COLLATE Chinese_Traditional_Stroke_Order_100_CS_AS_KS_WS,C2 NVARCHAR(20)COLLATE Chinese_Traditional_Stroke_Order_100_CS_AS_KS_WS)INSERT INTO
T VALUES (N"中华人民共和国",N"中华人民共和国"), (N"abc",N"abc");SELECT C1, C2, LEN(C1) AS , DATALENGTH(C1) AS , LEN(C2) AS , DATALENGTH(C2) AS FROM
T Trả về

*

Lưu ý rằng các cam kết từ 华 và 国 vẫn chưa được mô tả trong phiên bản VARCHAR và được thay thế bởi âm thầm ?.

Thực tế vẫn không có ký kết trường đoản cú tiếng Hoa nào rất có thể được tái diễn vị một byte trong so sánh đó. Các ký từ bỏ byte 1-1 tốt nhất là cỗ tây điển hình ASCII.

Do kia, có thể chèn trường đoản cú cột nvarchar(X) vào cột varchar(X)ko thành công cùng với lỗi giảm ngắn (trong những số đó X bộc lộ một số tương đương nhau vào cả nhì trường hợp).

SQL Server 2012 thêm những đối chiếu SC (Ký tự ngã sung) hỗ trợ UTF-16. Trong các so sánh này, một ký kết tự nvarchar có thể mất 2 hoặc 4 byte.


88
23 thg 11, 2011Martin Smith
nchar cùng char chuyển động tương đối tương đương nhau theo cách tương tự tương đồng, cũng tương tự nvarchar với varchar. Sự khác biệt duy nhất giữa bọn chúng là nchar/nvarchar tàng trữ những cam kết từ bỏ Unicode (cần thiết nếu bạn trải nghiệm sử dụng các bộ ký trường đoản cú mlàm việc rộng) trong những lúc varchar thì không.

Vì những cam kết tự Unicode đòi hỏi tàng trữ nhiều hơn thế, các trường nchar/nvarchar chiếm gấp đôi dung tích (ví dụ: trong những phiên bạn dạng trước của SQL Server, form size về tối nhiều của ngôi trường nvarchar là 4000).

Xem thêm: Khai Thác Bitcoin Như Thế Nào, Cách Đào Chúng Như Thế Nào Nào

Câu hỏi này là 1 trong phiên bản sao của thắc mắc này .


33
6 thg 10, 2008Luke Bennett
Chỉ đề xuất thêm một cái gì đấy nữa: nchar - thêm dấu phương pháp vào dữ liệu. nvarchar - ko thêm vệt giải pháp vào tài liệu.

Vì vậy, nếu như khách hàng định thanh lọc tập dữ liệu của chính mình theo trường "nchar", bạn có thể hy vọng thực hiện RTRIM nhằm xóa khoảng tầm trắng. lấy ví dụ. Trường nchar (10) được Điện thoại tư vấn là THƯƠNG HIỆU lưu trữ Word NIKE. Nó thêm 6 khoảng chừng Trắng sinh sống mặt đề nghị của Lời. Vì vậy, Lúc lọc, biểu thức bắt buộc đọc: RTRIM (Trường! Br&.Value "NIKE") ==

Hy vọng điều đó sẽ giúp được ai đó ngoại trừ cơ do tôi đã đề xuất vật lộn với nó một chút!


32
21 thg 7, 2011Dimuthu
Cố gắng của mình nhằm nắm tắt và sửa những câu vấn đáp hiện tại có:

Đầu tiên, char cùng nchar sẽ luôn luôn thực hiện một lượng không gian tàng trữ cố định và thắt chặt, trong cả lúc chuỗi được lưu trữ nhỏ tuổi rộng không khí tất cả sẵn, trong những lúc đó varchar với nvarchar sẽ chỉ thực hiện những dung lượng lưu trữ kia. byte ngân sách, có lẽ để tàng trữ độ dài chuỗi). Vì vậy, hãy nhớ, "var" tức là "biến", nhỏng vào không khí trở thành.

Điểm thiết yếu vật dụng hai đề xuất gọi là, nchar với nvarchar lưu trữ chuỗi bằng cách thực hiện bao gồm xác nhì byte cho từng cam kết từ, trong những lúc char với varchar áp dụng mã hóa được khẳng định vị trang mã đối chiếu, đã thường thường và đúng là một byte cho từng ký kết trường đoản cú (tuy vậy bao gồm trường vừa lòng nước ngoài lệ, coi mặt dưới). Bằng giải pháp thực hiện hai byte cho từng ký từ bỏ, một phạm vi ký từ rất rộng lớn rất có thể được lưu trữ, bởi vì vậy điều cơ bạn dạng yêu cầu ghi nhớ ở đó là nchar với nvarchar tất cả xu hướng là lựa chọn tốt hơn đôi khi bạn muốn cung cấp quốc tế hóa, điều nhưng bạn có thể có tác dụng.

Bây giờ mang lại một số trong những điểm xuất sắc hơn.

trước hết, các cột nchar cùng nvarcharalways tàng trữ dữ liệu bằng UCS-2. Như vậy Có nghĩa là đúng mực hai byte cho từng ký từ sẽ được thực hiện với bất kỳ ký từ Unicode làm sao trong Mặt phẳng nhiều ngôn ngữ cơ bạn dạng (BMP) hoàn toàn có thể được tàng trữ bởi ngôi trường nchar hoặc nvarchar. Tuy nhiên, không phải ngôi trường hòa hợp nào any Ký trường đoản cú Unicode có thể được lưu trữ. ví dụ như, theo Wikipedia, những điểm mã cho chữ tượng hình Ai Cập nằm kế bên BMP.. Do kia, có các chuỗi Unicode hoàn toàn có thể được màn biểu diễn vào UTF-8 với những bảng mã Unicode thực thụ khác quan yếu được lưu trữ vào ngôi trường SQL Server nchar hoặc nvarchar với các chuỗi được viết bằng chữ tượng hình Ai Cập đã ở trong những đó. May mắn là người tiêu dùng của bạn có thể không viết theo kịch bạn dạng đó, tuy nhiên đó là điều bắt buộc lưu ý!

Một điểm khó hiểu nhưng thú vui không giống nhưng những áp phích khác đã nhấn mạnh vấn đề là những ngôi trường char và varchar rất có thể áp dụng hai byte cho mỗi ký kết từ bỏ mang lại một số trong những cam kết từ khăng khăng ví như trang mã đối chiếu yên cầu nó. (Martin Smith đưa ra một ví dụ hoàn hảo nhất, trong các số ấy anh ấy cho thấy thêm bí quyết Trung Quốc_Traditable_Stroke_Order_100_CS_AS_KS_WS biểu lộ hành động này. Hãy coi test.)

CẬP NHẬT: Kể tự SQL Server 2012, sau cuối cũng có thể có trang mã đến UTF-16 , ví dụ Latin1_General_100_CI_AS_SC bao gồm toàn bộ phạm vi Unicode.


nchar<(n)> (ký kết tự quốc gia)

Độ dài cố định và thắt chặt nicode tài liệu chuỗi.n xác định độ dài chuỗi với cần là giá trị từ là 1 mang đến 4.000.Kích thước lưu trữ là hai lần n byte.

nvarchar <(n | max)> (ký tự quốc gia khác biệt.)

Độ dài đổi mới nicode tài liệu chuỗi.n xác minh độ dài chuỗi với có thể là cực hiếm từ một đến 4.000.max cho là kích thước tàng trữ tối nhiều là 2 ^ 3đối kháng byte (2 GB).Kích thước lưu trữ, tính bằng byte, gấp hai lần chiều lâu năm thực của dữ liệu được nhập + 2 byte

char <(n)> (ký tự)

Dữ liệu chuỗi tất cả độ nhiều năm thắt chặt và cố định, non-Unicode.n khẳng định độ lâu năm chuỗi và cần là cực hiếm từ 1 mang đến 8.000.Kích thước lưu trữ là n byte.

varchar <(n | max)> (thay đổi ký kết tự)

Độ lâu năm vươn lên là, không phải Unicode tài liệu chuỗi.n khẳng định độ lâu năm chuỗi cùng rất có thể là quý hiếm từ một mang lại 8.000.max cho là form size tàng trữ tối đa là 2 ^ 3solo byte (2 GB).Kích thước tàng trữ là chiều nhiều năm thực tế của tài liệu được nhập + 2 byte.
Sự khác biệt là:

n char lưu trữ unicode trong những lúc char chỉ lưu trữ các cam kết từ byte đối kháng. char thưởng thức một vài ký tự cố định gồm độ nhiều năm chính xác trong khi varchar đồng ý số lượng ký kết tự chuyển đổi lên tới với bao hàm cả độ lâu năm được xác định.

Một sự khác biệt không giống là chiều nhiều năm. Cả nchar cùng nvarchar có thể nhiều năm tới 4.000 cam kết trường đoản cú. Và char và varchar hoàn toàn có thể nhiều năm cho tới 8000 cam kết tự. Nhưng so với SQL Server, bạn có thể sử dụng varchar (max) rất có thể xử lý tối đa 2.147.483.648 ký từ. (Hai gigabyte, số nguyên ổn 4 byte đã ký kết.)

xổ số miền nam