SQL Server의 Char, Nchar, Varchar 및 Nvarchar의 차이점은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/176514

  •  05-07-2019
  •  | 
  •  

문제

의미하는 바 nvarchar?

차이점은 무엇입니까? char, nchar, varchar, 그리고 nvarchar SQL 서버에서?

도움이 되었습니까?

해결책

그냥 정리하기 위해 ... 또는 요약 ...

  • nchar 그리고 nvarchar 저장할 수 있습니다 유니 코드 캐릭터.
  • char 그리고 varchar 유니 코드를 저장할 수 없습니다 캐릭터.
  • char 그리고 nchar ~이다 고정 길이 할 것입니다 저장 공간을 예약하십시오 문자 수에 대해 모든 공간을 사용하지 않더라도 지정합니다.
  • varchar 그리고 nvarchar ~이다 가변 길이 저장 한 캐릭터의 공간 만 사용합니다. 그것 스토리지를 보유하지 않습니다 char 또는 nchar.

nchar 그리고 nvarchar 저장 공간이 두 배나 높아 지므로 필요한 경우에만 사용하는 것이 현명 할 수 있습니다. 유니 코드 지원하다.

다른 팁

지금까지 모든 답변은 그것을 나타냅니다 varchar 단일 바이트이고 nvarchar 이중 바이트입니다. 이것의 첫 번째 부분 Collation에 따라 다릅니다 아래 그림과 같이.

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  

보고

enter image description here

주목하십시오 그리고 캐릭터는 여전히 표현되지 않았습니다 VARCHAR 버전으로 조용히 교체되었습니다 ?.

실제로 해당 협업에서 단일 바이트에 의해 책망 할 수있는 한자는 여전히 없습니다. 유일한 단일 바이트 문자는 일반적인 서부 ASCII 세트입니다.

이 때문에 삽입 할 수 있습니다. nvarchar(X) 열에서 a varchar(X)잘림 오류로 실패합니다 (여기서 x는 두 사례에서 동일한 숫자를 나타냅니다).

SQL Server 2012는 지원하는 SC (Supplementary Character) 콜로레이션을 추가합니다. UTF-16. 이 콜로레이션에서는 단일입니다 nvarchar 문자는 2 또는 4 바이트가 필요할 수 있습니다.

NCHAR과 Char는 Nvarchar 및 Varchar와 같은 방식으로 정확히 같은 방식으로 작동합니다. 그들 사이의 유일한 차이점은 Varchar가 그렇지 않은 동안 NCHAR/NVARCHAR STORE UNICODE 문자 (확장 문자 세트를 사용하는 경우 필수)입니다.

유니 코드 문자는 더 많은 스토리지가 필요하기 때문에 NCHAR/NVARCHAR 필드는 공간보다 두 배를 차지합니다 (예 : 이전 버전의 SQL 서버에서는 NVarchar 필드의 최대 크기가 4000입니다).

이 질문은의 복제입니다 이 하나.

더 많은 것을 추가하려면 :NCHAR - 데이터에 후행 공간을 추가합니다.nvarchar - 데이터에 후행 공간을 추가하지 않습니다.

따라서 'NCHAR'필드로 데이터 세트를 필터링하려는 경우 rtrim을 사용하여 공백을 제거 할 수 있습니다. 예를 들어, NCHAR (10) 필드는 브랜드가 Nike라는 단어를 저장합니다. 단어의 오른쪽에 6 개의 공간이 추가됩니다. 따라서 필터링 할 때 표현식을 읽어야합니다.rtrim (Fields! Brand.Value) = "Nike"

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

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

첫 번째, char 그리고 nchar 저장 될 스트링이 사용 가능한 공간보다 작을 때에도 항상 고정 된 양의 저장 공간을 사용합니다. varchar 그리고 nvarchar 해당 문자열을 저장하는 데 필요한 저장 공간 만 사용합니다 (아마도 스트링 길이를 저장하기 위해 2 바이트의 오버 헤드). 따라서 "var"는 가변 공간에서와 같이 "변수"를 의미합니다.

이해해야 할 두 번째 주요 요점은 nchar 그리고 nvarchar 사용을 저장하십시오 바로 그거죠 문자 당 2 바이트 char 그리고 varchar Collation 코드 페이지에서 결정한 인코딩을 사용합니다. 대개 문자 당 하나의 바이트가 되십시오 (예외가 있지만 아래 참조). 문자 당 두 바이트를 사용하면 매우 광범위한 문자를 저장할 수 있으므로 여기에서 기억해야 할 기본 사항은 nchar 그리고 nvarchar 국제화 지원을 원할 때 훨씬 더 나은 선택이되는 경향이 있습니다.

이제 약간의 더 미세한 포인트.

첫 번째, nchar 그리고 nvarchar언제나 UCS-2를 사용하여 데이터를 저장합니다. 이것은 문자 당 정확히 두 바이트가 사용될 것이며 기본 다국어 평면 (BMP)의 유니 코드 문자는 nchar 또는 nvarchar 필드. 그러나 그렇지 않습니다 어느 유니 코드 문자를 저장할 수 있습니다. 예를 들어, Wikipedia에 따르면 이집트 상형 문자의 코드는 BMP를 벗어납니다. 따라서 UTF-8에 표현 될 수있는 유니 코드 문자열 및 SQL 서버에 저장할 수없는 기타 진정한 유니 코드 인코딩이 있습니다. nchar 또는 nvarchar 필드와 이집트 상형 문자로 쓰여진 문자열이 그 중 하나 일 것입니다. 다행히도 사용자는 아마도 그 대본에 글을 쓰지 않을 것입니다. 그러나 그것은 명심해야 할 것입니다!

다른 포스터가 강조한 또 다른 혼란 스럽지만 흥미로운 점은 char 그리고 varchar Collation 코드 페이지에 필요한 경우 필드는 특정 문자에 대해 문자 당 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까지의 값이어야합니다.
  • 스토리지 크기는 두 번입니다 n 바이트.

nvarchar [(n | max)] (국가적 캐릭터는 다양합니다.)

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

char [(n)] (캐릭터)

  • 고정 길이, non-Unicode 문자열 데이터.
  • n 문자열 길이를 정의하고 1에서 8,000까지 값이어야합니다.
  • 스토리지 크기는입니다 n 바이트.

varchar [(n | max)] (캐릭터 다양)

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

차이점들 이다:

  1. n [var] char는 저장하고 [var] char는 단일 바이트 문자를 저장합니다.
  2. n] char는 정확한 길이의 고정 된 수의 문자를 요구하는 반면 [n] varchar는 정의 된 길이를 포함하여 가변 수의 문자 수를 받아들입니다.

또 다른 차이점은 길이입니다. NCHAR과 NVARCHAR의 길이는 최대 4,000 자입니다. Char와 Varchar의 길이는 최대 8000 자일 수 있습니다. 그러나 SQL Server의 경우 최대 2,147,483,648자를 처리 할 수있는 [n] varchar (max)를 사용할 수도 있습니다. (2 기가 바이트, 서명 된 4 바이트 정수.)

nchar가 필요합니다 보다 더 많은 공간 nvarchar.

예,

Char (100)는 5 만 입력하더라도 항상 100자를 저장하면 나머지 95 숯은 공백으로 채워집니다. Varchar (100)에 5자를 저장하면 5자가 절약됩니다.

NCHAR (10)은 길이 10의 고정 길이 유니 코드 문자열입니다. nvarchar (10)는 최대 길이가 최대 10 인 가변 길이의 유니 코드 문자열입니다. 일반적으로 모든 데이터 값이 10 자이고 후자의 경우 전자를 사용합니다. 길이가 다른 경우.

  • NCHAR은 고정 길이이며 유니 코드 문자를 보유 할 수 있습니다. 문자 당 두 바이트 스토리지를 사용합니다.

  • Varchar는 길이가 다양하며 유니 코드 문자를 유지할 수 없습니다. 문자 당 하나의 바이트 스토리지를 사용합니다.

nvarchar 유니 코드 문자를 저장하고 문자 당 2 바이트를 가져갈 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top