무엇을 의미 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 비트 길이
답변
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 바이트입니다.