nchar 및 nvarchar(Transact-SQL)

적용 대상: SQL Server Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System(PDW)

고정 크기(nchar) 또는 가변 크기(nvarchar)인 문자 데이터 형식입니다. SQL Server 2012(11.x)부터 SC(보조 문자) 사용 데이터 정렬을 사용할 때 이러한 데이터 형식은 전체 범위의 유니코드 문자 데이터를 저장하고 UTF-16 문자 인코딩을 사용합니다. SC가 아닌 데이터 정렬이 지정된 경우 이러한 데이터 형식은 UCS-2 문자 인코딩에서 지원하는 문자 데이터의 하위 집합만 저장합니다.

인수

nchar [ ( n ) ]

고정 크기 문자열 데이터입니다. n은 바이트 쌍으로 문자열 크기를 정의하며 1에서 4,000 사이의 값이어야 합니다. 스토리지 크기는 n바이트의 두 배입니다. UCS-2 인코딩의 경우 스토리지 크기는 n바이트의 두 배이고 저장할 수 있는 문자 수도 n입니다. UTF-16 인코딩의 경우 스토리지 크기는 여전히 n바이트의 두 배이지만, 보조 문자가 2바이트 쌍(서로게이트 쌍이라고도 함)을 사용하기 때문에 저장할 수 있는 문자 수는 n보다 작을 수 있습니다. nchar의 ISO 동의어는 national charnational character입니다.

nvarchar [ ( n | max ) ]

가변 크기 문자열 데이터입니다. n은 바이트 쌍으로 문자열 길이를 정의하며 1에서 4,000 사이의 값일 수 있습니다. max는 최대 스토리지 크기가 2^31-1자(2 GB)임을 나타냅니다. 스토리지 크기는 n바이트 + 2바이트의 두 배입니다. UCS-2 인코딩의 경우 스토리지 크기는 n바이트 + 2바이트의 두 배이고 저장할 수 있는 문자 수도 n입니다. UTF-16 인코딩의 경우 스토리지 크기는 여전히 n바이트 +2바이트의 두 배이지만, 보조 문자가 2바이트 쌍(서로게이트 쌍이라고도 함)을 사용하기 때문에 저장할 수 있는 문자 수는 n보다 작을 수 있습니다. nvarchar의 ISO 동의어는 national char varyingnational character varying로 다양합니다.

설명

nchar(n)nvarchar(n)에서 n이 문자 수를 정의한다고 잘못 생각하는 경우가 많습니다. 그러나 nchar(n)nvarchar(n)에서 n바이트 쌍의 문자열 길이(0~4,000)를 정의합니다. n은 저장할 수 있는 문자 수를 정의하지 않습니다. char(n)varchar(n) 정의와 비슷합니다.

이러한 오해는 유니코드 범위 0~65,535에 정의된 문자를 사용하는 경우 각 바이트 쌍당 하나의 문자를 저장할 수 있기 때문에 발생합니다. 그러나 더 높은 유니코드 범위(65,536~1,114,111)에서는 한 문자가 두 개의 바이트 쌍을 사용할 수 있습니다. 예를 들어 nchar(10)로 정의된 열에서 데이터베이스 엔진은 하나의 바이트 쌍을 사용하는 문자(유니코드 범위 0~65,535) 10자를 저장할 수 있지만, 두 개의 바이트 쌍을 사용하는 경우(유니코드 범위 65,536~1,114,111) 10자 미만을 저장할 수 있습니다. 유니코드 스토리지 및 문자 범위에 대한 자세한 내용은 UTF-8과 UTF-16 간의 스토리지 차이점을 참조하세요.

데이터 정의나 변수 선언문에서 n을 지정하지 않으면 기본 길이는 1입니다. CAST 함수에 n을 지정하지 않은 경우 기본 길이는 30입니다.

nchar 또는 nvarchar를 사용하는 경우 다음을 수행하는 것이 좋습니다.

  • 열 데이터 항목의 크기가 일관된 경우 nchar를 사용합니다.
  • 열 데이터 항목의 크기가 비교적 큰 차이를 보일 경우 nvarchar를 사용합니다.
  • 열 데이터 항목들의 크기가 비교적 큰 차이를 보이고 문자열 길이가 4,000바이트 쌍을 초과할 수 있는 경우 nvarchar(max)를 사용합니다.

sysname은 시스템이 제공하는 사용자 정의 데이터 형식으로 Null을 허용하지 않는다는 점을 제외하면 기능상 nvarchar(128)와 동일합니다. sysname은 데이터베이스 개체 이름을 참조하는 데 사용됩니다.

nchar 또는 nvarchar를 사용하는 개체에는 COLLATE 절을 사용하여 특정 데이터 정렬을 할당하지 않는 한 데이터베이스의 기본 데이터 정렬이 할당됩니다.

SET ANSI_PADDING은 항상 ncharnvarchar에 대해 ON입니다. SET ANSI_PADDING OFFnchar 또는 nvarchar 데이터 형식에 적용되지 않습니다.

유니코드 문자 문자열 상수 앞에 N 문자를 추가하여 SC 데이터 정렬 사용 여부에 따라 UCS-2 또는 UTF-16 입력을 알립니다. N 접두사가 없으면 문자열이 특정 문자를 인식할 수 없는 데이터베이스의 기본 코드 페이지로 변환됩니다. SQL Server 2019(15.x)부터 UTF-8 사용 데이터 정렬이 사용될 때 기본 코드 페이지는 유니코드 UTF-8 문자 집합을 저장할 수 있습니다.

문자열 상수 앞에 문자 N을 붙일 때 변환할 상수가 nvarchar 문자열 데이터 형식(4,000)의 최대 길이를 초과하지 않는 경우 암시적 변환의 결과 UCS-2 또는 UTF-16 문자열이 됩니다. 그렇지 않은 경우 암시적 변환으로 nvarchar 큰 값(최대)이 됩니다.

경고

Null이 아닌 각 varchar(max) 또는 nvarchar(max) 열은 24바이트의 추가 고정 할당이 필요하며 정렬 작업 시 여기에 8,060바이트의 행 제한이 적용됩니다. 이러한 추가 바이트로 인해 테이블에서 null이 아닌 varchar(max) 또는 nvarchar(max) 열의 수에 묵시적 제한이 적용됩니다. 테이블 생성 시 또는 데이터 삽입 시점에 특별한 오류(최대 행의 크기가 최대로 허용된 8,060바이트를 초과한다는 일반적인 경고 외의 메시지)가 표시되지 않습니다. 이렇게 큰 행 크기로 인해 사용자가 일부 정상 작업 중 예기치 않은 오류가 발생할 수 있습니다(예: 오류 512). 작업의 두 가지 예제는 클러스터형 인덱스 키 업데이트 또는 전체 열 집합의 종류입니다.

문자 데이터 변환

문자 데이터 변환에 대한 자세한 내용은 char 및 varchar(Transact-SQL)를 참조하세요.

추가 정보