무엇을 의미 nvarchar
합니까?
차이점은 무엇이며 char
, nchar
, varchar
, 및 nvarchar
SQL Server의는?
무엇을 의미 nvarchar
합니까?
차이점은 무엇이며 char
, nchar
, varchar
, 및 nvarchar
SQL Server의는?
답변:
정리하거나 요약하면 ...
nchar
및 nvarchar
저장할 수있는 유니 코드 문자를.char
및 유니 코드를 저장할 수없는 문자를.varchar
char
및 nchar
되는 길이 고정 됩니다 저장 공간을 확보 당신이 모든 공간을 사용하지 않는 경우에도 사용자가 지정한 문자의 번호를.varchar
하고 nvarchar
있는 가변 길이 에만 저장하는 문자 공간을 사용합니다. 이 같은 스토리지를 보유하지 않습니다 char
나nchar
.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"은 가변 공간에서와 같이 "가변"을 의미합니다.
이해 번째 중요한 점은 인, nchar
및 nvarchar
이용 저장 문자열 정확히 반면, 문자 당 2 바이트 char
와 varchar
것이다 조합 코드 페이지에 의해 결정된 부호화 사용할 통상 (가, 예외 아래 참조하지만) 문자 당 정확히 하나의 바이트 수있다. 여기서 기억해야 할 기본적인 일이 있다는 것입니다 수 있도록 문자 당 2 바이트를 사용하여 문자의 매우 넓은 범위, 저장할 수 nchar
및 nvarchar
당신이 아마 할 국제화 지원을 할 때 훨씬 더 나은 선택이 될 경향이있다.
이제 좀 더 좋은 점이 있습니다.
첫째, nchar
및 nvarchar
열은 항상 UCS-2 사용하여 데이터를 저장합니다. 이는 문자 당 정확히 2 바이트가 사용되며 BMP (Basic Multilingual Plane)의 모든 유니 코드 문자는 nchar
또는 nvarchar
필드 로 저장 될 수 있음을 의미 합니다. 그러나, 그 경우가 아니라 모든 유니 코드 문자가 저장 될 수있다. 예를 들어 Wikipedia에 따르면 이집트 상형 문자의 코드 포인트는 BMP 외부에 있습니다. 따라서 UTF-8로 표현할 수있는 유니 코드 문자열과 SQL Server nchar
또는 nvarchar
필드에 저장할 수없는 다른 실제 유니 코드 인코딩이 있으며 이집트 상형 문자로 작성된 문자열이 그 중 하나입니다. 다행히도 사용자는 해당 스크립트를 작성하지 않지만 명심해야 할 내용입니다.
또 다른 혼란을하지만, 다른 포스터 강조했다고 흥미로운 점은 것입니다 char
및 varchar
데이터 정렬 코드 페이지가 필요한 경우 필드는 특정 문자에 대한 문자 당 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 비트 길이char
8 비트 길이를 가질 수 없습니다. 길이를 저장할 필요가 없으며 고정 길이는 최대 8000 자입니다.
nchar[(n)]
(국가적 인물)
n
문자열 길이를 정의하며 1에서 4,000 사이의 값이어야합니다.n
바이트입니다.nvarchar [(n | max)]
(국가 특성이 다름)
n
문자열 길이를 정의하며 1에서 4,000 사이의 값이 될 수 있습니다.max
최대 스토리지 크기가 2 ^ 31-1 바이트 (2GB)임을 나타냅니다.char [(n)]
(캐릭터)
non-Unicode
문자열 데이터n
문자열 길이를 정의하며 1에서 8,000 사이의 값이어야합니다.n
바이트입니다.varchar [(n | max)]
(캐릭터 변경)
n
문자열 길이를 정의하며 1에서 8,000 사이의 값이 될 수 있습니다.max
최대 스토리지 크기가 2 ^ 31-1 바이트 (2GB)임을 나타냅니다.또 다른 차이점은 길이입니다. nchar와 nvarchar는 최대 4,000 자까지 가능합니다. 그리고 char와 varchar는 최대 8000 자까지 가능합니다. 그러나 SQL Server의 경우 최대 2,147,483,648자를 처리 할 수있는 [n] varchar (max)를 사용할 수도 있습니다. (2 기가 바이트, 부호있는 4 바이트 정수)
nchar은 nvarchar 보다 많은 공간을 필요로합니다 .
예를 들어
5를 입력하더라도 nchar (100)은 항상 100자를 저장합니다. 나머지 95 개의 문자는 공백으로 채워집니다. nvarchar (100)에 5자를 저장하면 5자가 저장됩니다.
nchar (10)은 길이가 10 인 고정 길이 유니 코드 문자열입니다. nvarchar (10)은 최대 길이가 10 인 가변 길이 유니 코드 문자열입니다. 일반적으로 모든 데이터 값이 10 자이고 후자 인 경우 전자를 사용합니다. 길이가 다른 경우.
nchar은 고정 길이이며 유니 코드 문자를 포함 할 수 있습니다. 문자 당 2 바이트 저장 영역을 사용합니다.
varchar의 길이는 가변적이며 유니 코드 문자를 포함 할 수 없습니다. 문자 당 1 바이트 스토리지를 사용합니다.
UCS-2
(SQL Server에서 사용되는 인코딩으로) 인코딩 된 유니 코드 는 모든 문자를 정확히 2 바이트로 저장합니다 . msdn.microsoft.com/en-us/library/bb330962%28v=sql.90%29.aspx :를 참조 하십시오SQL Server stores Unicode in the UCS-2 encoding scheme... UCS-2 is a fixed-length encoding that represents all characters as a 16-bit value (2 bytes)
. SQL Server 2008은 SCSU 압축을 사용할 수 있지만 여전히 UCS-2로 인코딩 된 유니 코드 문자열을 압축합니다. msdn.microsoft.com/en-us/library/ee240835.aspx
NVARCHAR 은 유니 코드 문자를 저장할 수 있으며 문자 당 2 바이트를 사용합니다.
nvarchar
항상 문자 당 2 바이트를 사용합니다.