[sql-server] SQL Server에서 char, nchar, varchar 및 nvarchar의 차이점은 무엇입니까?

무엇을 의미 nvarchar합니까?

차이점은 무엇이며 char, nchar, varchar, 및 nvarcharSQL Server의는?



답변

정리하거나 요약하면 …

  • ncharnvarchar저장할 수있는 유니 코드 문자를.
  • char유니 코드를 저장할 수없는 문자를.varchar
  • charnchar되는 길이 고정 됩니다 저장 공간을 확보 당신이 모든 공간을 사용하지 않는 경우에도 사용자가 지정한 문자의 번호를.
  • varchar하고 nvarchar있는 가변 길이 에만 저장하는 문자 공간을 사용합니다. 이 같은 스토리지를 보유하지 않습니다 charnchar .

nchar그리고 nvarchar당신이 필요로하는 경우에만이를 사용하는 것이 현명 할 수 있도록 저장 공간으로 두 번 차지합니다 유니 코드 지원.


답변

지금까지의 모든 대답 varchar은 단일 바이트, nvarchar 이중 바이트 임을 나타냅니다 . 첫 번째 부분은 실제로 아래 그림과 같이 데이터 정렬에 따라 다릅니다 .

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 [LEN(C1)],
       DATALENGTH(C1) AS [DATALENGTH(C1)],
       LEN(C2)        AS [LEN(C2)],
       DATALENGTH(C2) AS [DATALENGTH(C2)]
FROM   @T  

보고

여기에 이미지 설명을 입력하십시오

점을 유의 문자가 아직 표현되지 않은 VARCHAR버전을 자동으로 대체되었다 ?.

실제로 해당 데이터 정렬에서 단일 바이트로 표시 할 수있는 한자는 없습니다. 유일한 단일 바이트 문자는 전형적인 서부 ASCII 세트입니다.

이 때문에 그것은 행을 삽입 할 수있다 nvarchar(X)(A)에 열 varchar(X)truncation 에러 실패하는 (X는 두 경우에 동일 번호를 나타낸다).

SQL Server 2012는를 지원하는 SC (Supplementary Character) 데이터 정렬을 추가합니다 UTF-16. 이러한 데이터 정렬에서 단일 nvarchar문자는 2 또는 4 바이트를 사용할 수 있습니다.


답변

nchar와 char는 nvarchar와 varchar처럼 서로 정확히 같은 방식으로 작동합니다. 그들 사이의 유일한 차이점은 varchar가 아닌 nchar / nvarchar가 유니 코드 문자 (확장 문자 집합을 사용해야하는 경우 필수)를 저장한다는 것입니다.

유니 코드 문자에는 더 많은 저장 공간이 필요하므로 nchar / nvarchar 필드는 두 배의 공간을 차지합니다 (예 : 이전 버전의 SQL Server에서는 nvarchar 필드의 최대 크기는 4000입니다).

이 질문의 중복 이 하나 .


답변

: 그냥 뭔가 더 추가
NCHAR를 – 데이터에 후행 공백을 추가합니다.
nvarchar- 데이터에 후행 공백을 추가하지 않습니다.

따라서 ‘nchar’필드로 데이터 세트를 필터링하려는 경우 RTRIM을 사용하여 공백을 제거 할 수 있습니다. 예를 들어 BRAND라는 nchar (10) 필드에는 NIKE라는 단어가 저장됩니다. 단어 오른쪽에 6 칸을 더합니다. 따라서 필터링시 식은 다음과 같아야합니다.
RTRIM (Fields! BRAND.Value) = “NIKE”

내가 지금 조금 어려움을 겪고 있었기 때문에 이것이 누군가를 도울 수 있기를 바랍니다.


답변

기존 답변을 요약하고 수정하려는 시도 :

먼저, char그리고 nchar반면에 항상 저장되는 문자열이 가능한 공간보다 작은 경우라도, 저장 공간의 고정 된 양을 사용 varchar하고 nvarchar그 문자열 (플러스 헤드의 2 바이트를 저장하는 데 필요한만큼의 저장 공간으로 만 사용되며, 아마도 문자열 길이를 저장할 것입니다). 따라서 “var”은 가변 공간에서와 같이 “가변”을 의미합니다.

이해 번째 중요한 점은 인, ncharnvarchar이용 저장 문자열 정확히 반면, 문자 당 2 바이트 charvarchar것이다 조합 코드 페이지에 의해 결정된 부호화 사용할 통상 (가, 예외 아래 참조하지만) 문자 당 정확히 하나의 바이트 수있다. 여기서 기억해야 할 기본적인 일이 있다는 것입니다 수 있도록 문자 당 2 바이트를 사용하여 문자의 매우 넓은 범위, 저장할 수 ncharnvarchar당신이 아마 할 국제화 지원을 할 때 훨씬 더 나은 선택이 될 경향이있다.

이제 좀 더 좋은 점이 있습니다.

첫째, ncharnvarchar열은 항상 UCS-2 사용하여 데이터를 저장합니다. 이는 문자 당 정확히 2 바이트가 사용되며 BMP (Basic Multilingual Plane)의 모든 유니 코드 문자는 nchar또는 nvarchar필드 로 저장 될 수 있음을 의미 합니다. 그러나, 그 경우가 아니라 모든 유니 코드 문자가 저장 될 수있다. 예를 들어 Wikipedia에 따르면 이집트 상형 문자의 코드 포인트는 BMP 외부에 있습니다. 따라서 UTF-8로 표현할 수있는 유니 코드 문자열과 SQL Server nchar또는 nvarchar필드에 저장할 수없는 다른 실제 유니 코드 인코딩이 있으며 이집트 상형 문자로 작성된 문자열이 그 중 하나입니다. 다행히도 사용자는 해당 스크립트를 작성하지 않지만 명심해야 할 내용입니다.

또 다른 혼란을하지만, 다른 포스터 강조했다고 흥미로운 점은 것입니다 charvarchar데이터 정렬 코드 페이지가 필요한 경우 필드는 특정 문자에 대한 문자 당 2 바이트를 사용할 수 있습니다. (Martin Smith는 Chinese_Traditional_Stroke_Order_100_CS_AS_KS_WS가이 동작을 어떻게 나타내는 지 보여주는 훌륭한 예를 제공합니다. 확인하십시오.)

업데이트 : SQL Server 2012부터 최종적으로 UTF-16 에 대한 코드 페이지 ( 예 : Latin1_General_100_CI_AS_SC)가 있으며 전체 유니 코드 범위를 실제로 포함 할 수 있습니다.


답변

  • char: 최대 길이가 8000자인 고정 길이 문자 데이터.
  • nchar: 최대 길이가 4000자인 고정 길이 유니 코드 데이터
  • Char = 8 비트 길이
  • NChar = 16 비트 길이

답변

nchar[(n)] (국가적 인물)

  • 고정 길이 유니 코드 문자열 데이터
  • n 문자열 길이를 정의하며 1에서 4,000 사이의 값이어야합니다.
  • 스토리지 크기는 2 배 n바이트입니다.

nvarchar [(n | max)] (국가 특성이 다름)

  • 가변 길이 유니 코드 문자열 데이터.
  • n 문자열 길이를 정의하며 1에서 4,000 사이의 값이 될 수 있습니다.
  • max 최대 스토리지 크기가 2 ^ 31-1 바이트 (2GB)임을 나타냅니다.
  • 스토리지 크기 (바이트)는 입력 된 실제 데이터 길이의 2 배 + 2 바이트입니다.

char [(n)] (캐릭터)

  • 고정 길이, non-Unicode문자열 데이터
  • n 문자열 길이를 정의하며 1에서 8,000 사이의 값이어야합니다.
  • 저장소 크기는 n바이트입니다.

varchar [(n | max)] (캐릭터 변경)

  • 가변 길이의 비 유니 코드 문자열 데이터
  • n 문자열 길이를 정의하며 1에서 8,000 사이의 값이 될 수 있습니다.
  • max 최대 스토리지 크기가 2 ^ 31-1 바이트 (2GB)임을 나타냅니다.
  • 스토리지 크기는 입력 된 데이터의 실제 길이 + 2 바이트입니다.