char 및 varchar(Transact-SQL)char and varchar (Transact-SQL)

적용 대상: 예SQL Server 예Azure SQL Database 예Azure SQL Data Warehouse 예병렬 데이터 웨어하우스 APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

고정 크기(char) 또는 가변 크기(varchar)인 문자 데이터 형식입니다.Character data types that are either fixed-size, char, or variable-size, varchar. SQL Server 2019 (15.x)SQL Server 2019 (15.x)부터 UTF-8 사용 데이터 정렬을 사용할 때 이러한 데이터 형식은 전체 범위의 유니코드 문자 데이터를 저장하고 UTF-8 문자 인코딩을 사용합니다.Starting with SQL Server 2019 (15.x)SQL Server 2019 (15.x), when a UTF-8 enabled collation is used, these data types store the full range of Unicode character data and use the UTF-8 character encoding. UTF-8이 아닌 데이터 정렬이 지정된 경우 이러한 데이터 형식은 해당 데이터 정렬의 코드 페이지에서 지원하는 문자의 하위 집합만 저장합니다.If a non-UTF-8 collation is specified, then these data types store only a subset of characters supported by the corresponding code page of that collation.

인수Arguments

char [ ( n ) ] 고정 크기 문자열 데이터입니다.char [ ( n ) ] Fixed-size string data. n은 바이트로 문자열 크기를 정의하며 1에서 8,000 사이의 값이어야 합니다.n defines the string size in bytes and must be a value from 1 through 8,000. ‘라틴 문자’처럼 싱글바이트 인코딩 문자 집합의 경우 스토리지 크기는 n바이트이고 저장할 수 있는 문자 수도 n입니다. For single-byte encoding character sets such as Latin, the storage size is n bytes and the number of characters that can be stored is also n. 멀티바이트 인코딩 문자 집합의 경우 스토리지 크기는 여전히 n바이트이지만 저장할 수 있는 문자 수는 n보다 작을 수 있습니다.For multibyte encoding character sets, the storage size is still n bytes but the number of characters that can be stored may be smaller than n. ISO에서 정의한 char의 동의어는 character입니다.The ISO synonym for char is character. 문자 집합에 대한 자세한 내용은 싱글바이트 및 멀티바이트 문자 집합을 참조하세요.For more information on character sets, see Single-Byte and Multibyte Character Sets.

varchar [ ( n | max ) ] 가변 크기의 문자열 데이터입니다.varchar [ ( n | max ) ] Variable-size string data. n을 사용하여 문자열 크기(바이트)를 정의할 수 있으며 1~8,000 사이의 값이거나 최대를 사용하여 2^31-1바이트(2GB)의 최대 저장소 크기로 열 제약 조건을 나타낼 수 있습니다.Use n to define the string size in bytes and can be a value from 1 through 8,000 or use max to indicate a column constraint size up to a maximum storage of 2^31-1 bytes (2 GB). ‘라틴 문자’처럼 싱글바이트 인코딩 문자 집합의 경우 스토리지 크기는 n바이트 +2바이트이고 저장할 수 있는 문자 수도 n입니다. For single-byte encoding character sets such as Latin, the storage size is n bytes + 2 bytes and the number of characters that can be stored is also n. 멀티바이트 인코딩 문자 집합의 경우 스토리지 크기는 여전히 n바이트 + 2바이트지만 저장할 수 있는 문자 수는 n보다 작을 수 있습니다.For multi-byte encoding character sets, the storage size is still n bytes + 2 bytes but the number of characters that can be stored may be smaller than n. ISO에서 정의한 varchar의 동의어는 charvarying 또는 charactervarying입니다.The ISO synonyms for varchar are charvarying or charactervarying. 문자 집합에 대한 자세한 내용은 싱글바이트 및 멀티바이트 문자 집합을 참조하세요.For more information on character sets, see Single-Byte and Multibyte Character Sets.

RemarksRemarks

CHAR(n) 및 VARCHAR(n)에서 n이 문자 수를 정의한다고 잘못 생각하는 경우가 많습니다.A common misconception is to think that CHAR(n) and VARCHAR(n), the n defines the number of characters. 그러나 CHAR(n) 및 VARCHAR(n)에서 n바이트의 문자열 길이(0~8,000)를 정의합니다.But in CHAR(n) and VARCHAR(n) the n defines the string length in bytes (0-8,000). n은 저장할 수 있는 문자 수를 정의하지 않습니다.n never defines numbers of characters that can be stored. NCHAR(n) 및 NVARCHAR(n) 정의와 비슷합니다.This is similar to the definition of NCHAR(n) and NVARCHAR(n).
싱글바이트 인코딩을 사용하는 경우 CHAR 및 VARCHAR의 스토리지 크기는 n바이트이고 문자 수도 n자이기 때문에 오해가 발생합니다.The misconception happens because when using single-byte encoding, the storage size of CHAR and VARCHAR is n bytes and the number of characters is also n. 그러나 UTF-8과 같은 멀티바이트 인코딩의 경우 상위 유니코드 범위(128~1,114,111)에서는 한 문자가 2바이트 이상을 사용합니다.However, for multi-byte encoding such as UTF-8, higher Unicode ranges (128-1,114,111) result in one character using two or more bytes. 예를 들어 CHAR(10)로 정의된 열에서 데이터베이스 엔진Database Engine은 싱글바이트 인코딩을 사용하는 문자(유니코드 범위 0~127) 10자를 저장할 수 있지만, 멀티바이트 인코딩을 사용하는 경우(유니코드 범위 128~1,114,111) 10자 미만을 저장할 수 있습니다.For example, in a column defined as CHAR(10), the 데이터베이스 엔진Database Engine can store 10 characters that use single-byte encoding (Unicode range 0-127), but less than 10 characters when using multi-byte encoding (Unicode range 128-1,114,111). 유니코드 스토리지 및 문자 범위에 대한 자세한 내용은 UTF-8과 UTF-16 간의 스토리지 차이점을 참조하세요.For more information about Unicode storage and character ranges, see Storage differences between UTF-8 and UTF-16.

데이터 정의나 변수 선언문에서 n을 지정하지 않으면 기본 길이는 1입니다.When n isn't specified in a data definition or variable declaration statement, the default length is 1. CAST 및 CONVERT 함수를 사용할 경우 n을 지정하지 않으면 기본 길이는 30입니다.If n isn't specified when using the CAST and CONVERT functions, the default length is 30.

char 또는 varchar를 사용하는 개체에는 COLLATE 절을 사용하여 특정 데이터 정렬을 할당하지 않는 한 데이터베이스의 기본 데이터 정렬이 할당됩니다.Objects that use char or varchar are assigned the default collation of the database, unless a specific collation is assigned using the COLLATE clause. 데이터 정렬은 문자 데이터를 저장하는 데 사용되는 코드 페이지를 제어합니다.The collation controls the code page that is used to store the character data.

SQL ServerSQL Server의 멀티바이트 인코딩에는 다음이 포함됩니다.Multibyte encodings in SQL ServerSQL Server include:

  • 코드 페이지 936 및 950(중국어), 932(일본어) 또는 949(한국어)를 사용하는 일부 동아시아 언어의 경우 DBCS(더블바이트 문자 집합)입니다.Double-byte character sets (DBCS) for some East Asian languages using code pages 936 and 950 (Chinese), 932 (Japanese), or 949 (Korean).
  • 코드 페이지가 65001인 UTF-8입니다.UTF-8 with code page 65001. 적용 대상: SQL ServerSQL Server (SQL Server 2019 (15.x)SQL Server 2019 (15.x)부터 시작))Applies to: SQL ServerSQL Server (Starting with SQL Server 2019 (15.x)SQL Server 2019 (15.x)))

여러 언어를 지원하는 사이트가 있는 경우:If you have sites that support multiple languages:

  • SQL Server 2019 (15.x)SQL Server 2019 (15.x) 부터 UTF-8 사용 데이터 정렬을 사용하여 유니코드를 지원하고 문자 변환 문제를 최소화하세요.Starting with SQL Server 2019 (15.x)SQL Server 2019 (15.x), consider using a UTF-8 enabled collation to support Unicode and minimize character conversion issues.
  • 더 낮은 버전의 SQL Server 데이터베이스 엔진SQL Server Database Engine을(를) 사용하는 경우 유니코드 nchar 또는 nvarchar 데이터 형식을 사용하여 문자 변환 문제를 최소화하세요.If using a lower version of the SQL Server 데이터베이스 엔진SQL Server Database Engine, consider using the Unicode nchar or nvarchar data types to minimize character conversion issues.

char 또는 varchar를 사용하는 경우에는 다음과 같이 하는 것이 좋습니다.If you use char or varchar, we recommend to:

  • 열 데이터 항목의 크기가 일관된 경우 char를 사용합니다.Use char when the sizes of the column data entries are consistent.
  • 열 데이터 항목의 크기가 비교적 큰 차이를 보일 경우 varchar를 사용합니다.Use varchar when the sizes of the column data entries vary considerably.
  • 열 데이터 항목들의 크기가 비교적 큰 차이를 보이고 문자열 길이가 8,000바이트를 초과할 수 있는 경우 varchar(max) 를 사용합니다.Use varchar(max) when the sizes of the column data entries vary considerably, and the string length might exceed 8,000 bytes.

CREATE TABLE 또는 ALTER TABLE 중 하나를 실행할 때 SET ANSI_PADDING이 OFF면 NULL로 정의된 char 열이 varchar로 처리됩니다.If SET ANSI_PADDING is OFF when either CREATE TABLE or ALTER TABLE is executed, a char column that is defined as NULL is handled as varchar.

경고

Null이 아닌 각 varchar(max) 또는 nvarchar(max) 열은 24바이트의 추가 고정 할당이 필요하며 정렬 작업 시 여기에 8,060바이트의 행 제한이 적용됩니다.Each non-null varchar(max) or nvarchar(max) column requires 24 bytes of additional fixed allocation which counts against the 8,060 byte row limit during a sort operation. 이로 인해 null이 아닌 varchar(max) 또는 테이블에서 생성할 수 있는 nvarchar (max)열의 수에 묵시적 제한이 적용됩니다.This can create an implicit limit to the number of non-null varchar(max) or nvarchar(max) columns that can be created in a table.
테이블 생성 시 또는 데이터 삽입 시점에 특별한 오류(최대 행의 크기가 최대로 허용된 8,060바이트를 초과한다는 일반적인 경고 외의 메시지)가 표시되지 않습니다.No special error is provided when the table is created (beyond the usual warning that the maximum row size exceeds the allowed maximum of 8,060 bytes) or at the time of data insertion. 이렇게 크기가 큰 행은 클러스터형 인덱스 키 업데이트 같은 일부 정상 작업이나 전체 열 집합 정렬에서 오류(오류 512 등)를 발생시킬 수 있고 사용자는 이러한 오류를 작업을 수행하기 전에는 예측할 수 없습니다.This large row size can cause errors (such as error 512) during some normal operations, such as a clustered index key update, or sorts of the full column set, which users can anticipate until performing an operation.

문자 데이터 변환Converting Character Data

문자 식이 다른 크기의 문자 데이터 형식으로 변환되면 새 데이터 형식에 대해 너무 긴 값은 잘립니다.When character expressions are converted to a character data type of a different size, values that are too long for the new data type are truncated. uniqueidentifier 형식은 문자 식에서 변환하기 위한 문자 형식으로 간주되므로, 문자 형식으로 변환하기 위한 잘림 규칙이 있습니다.The uniqueidentifier type is considered a character type for the purposes of conversion from a character expression, and so is subject to the truncation rules for converting to a character type. 뒷부분에 나오는 예 섹션을 참조하세요.See the Examples section that follows.

문자 식이 다른 데이터 형식 또는 크기의 문자 식으로 변환되는 경우(예: char(5) 에서 varchar(5) 로, 또는 char(20) 에서 char(15) 로) 입력 값의 데이터 정렬은 변환된 값에 적용됩니다.When a character expression is converted to a character expression of a different data type or size, such as from char(5) to varchar(5), or char(20) to char(15), the collation of the input value is assigned to the converted value. 문자 이외의 식을 문자 데이터 형식으로 변환하면 현재 데이터베이스의 기본 데이터 정렬이 변환된 값에 할당됩니다.If a noncharacter expression is converted to a character data type, the default collation of the current database is assigned to the converted value. 두 경우 모두 COLLATE 절을 사용하여 특정 데이터 정렬을 할당할 수 있습니다.In either case, you can assign a specific collation by using the COLLATE clause.

참고

charvarchar 데이터 형식에 대해서는 코드 페이지 변환이 지원되지만 text 데이터 형식에 대해서는 지원되지 않습니다.Code page translations are supported for char and varchar data types, but not for text data type. 이전 버전의 SQL ServerSQL Server와 마찬가지로 코드 페이지 변환 중 데이터 손실은 보고되지 않습니다.As with earlier versions of SQL ServerSQL Server, data loss during code page translations isn't reported.

근사 numeric 데이터 형식으로 변환되는 문자 식에는 선택적 지수 표기법이 포함될 수 있습니다.Character expressions that are being converted to an approximate numeric data type can include optional exponential notation. 이 표기법은 소문자 e 또는 대문자 E 다음에 선택적 더하기(+) 또는 빼기(-) 기호가 온 다음 숫자가 옵니다.This notation is a lowercase e or uppercase E followed by an optional plus (+) or minus (-) sign and then a number.

정확한 numeric 데이터 형식으로 변환되는 문자 식은 숫자, 소수점 및 옵션인 더하기(+) 또는 빼기(-) 기호로 구성되어야 합니다.Character expressions that are being converted to an exact numeric data type must consist of digits, a decimal point, and an optional plus (+) or minus (-). 선행 공백은 무시됩니다.Leading blanks are ignored. 123,456.00에서 천 단위 구분 기호와 같은 쉼표 구분 기호는 문자열에서 사용할 수 없습니다.Comma separators, such as the thousands separator in 123,456.00, aren't allowed in the string.

money 또는 smallmoney 데이터 형식으로 변환되는 문자 식에는 선택적 소수점 및 달러 기호($)가 포함될 수도 있습니다.Character expressions being converted to money or smallmoney data types can also include an optional decimal point and dollar sign ($). $123,456.00에서처럼 쉼표 구분자를 사용할 수 있습니다.Comma separators, as in $123,456.00, are allowed.

Examples

1.A. 변수 선언에 사용될 때 n의 기본값 표시Showing the default value of n when used in variable declaration.

다음 예에서는 charvarchar 데이터 형식이 변수 선언에 사용될 때 n의 기본값이 1임을 보여 줍니다.The following example shows the default value of n is 1 for the char and varchar data types when they are used in variable declaration.

DECLARE @myVariable AS varchar = 'abc';  
DECLARE @myNextVariable AS char = 'abc';  
--The following returns 1  
SELECT DATALENGTH(@myVariable), DATALENGTH(@myNextVariable);  
GO  

2.B. CAST 및 CONVERT에 varchar가 사용될 때 n의 기본값 표시Showing the default value of n when varchar is used with CAST and CONVERT.

다음 예에서는 char 또는 varchar 데이터 형식이 CASTCONVERT 함수에 사용될 때 n의 기본값이 30임을 보여 줍니다.The following example shows that the default value of n is 30 when the char or varchar data types are used with the CAST and CONVERT functions.

DECLARE @myVariable AS varchar(40);  
SET @myVariable = 'This string is longer than thirty characters';  
SELECT CAST(@myVariable AS varchar);  
SELECT DATALENGTH(CAST(@myVariable AS varchar)) AS 'VarcharDefaultLength';  
SELECT CONVERT(char, @myVariable);  
SELECT DATALENGTH(CONVERT(char, @myVariable)) AS 'VarcharDefaultLength';  

C.C. 표시를 위해 데이터 변환Converting Data for Display Purposes

다음 예에서는 두 개의 열을 문자 형식으로 변환한 후 해당 형식에 적용되는 스타일을 표시된 데이터에 적용합니다.The following example converts two columns to character types and applies a style that applies a specific format to the displayed data. money 형식이 문자 데이터로 변환되고 스타일 1이 적용됩니다. 스타일 1은 소수점 앞 세 자리마다 쉼표를 사용하고 소수점 뒤 두 자리까지 값을 표시합니다.A money type is converted to character data and style 1 is applied, which displays the values with commas every three digits to the left of the decimal point, and two digits to the right of the decimal point. datetime 형식이 문자 데이터로 변환되고 스타일 3이 적용됩니다. 스타일 3은 데이터를 dd/mm/yy 형식으로 표시합니다.A datetime type is converted to character data and style 3 is applied, which displays the data in the format dd/mm/yy. WHERE 절에서 money 형식은 문자열 비교 연산을 수행하기 위해 문자 형식으로 캐스팅됩니다.In the WHERE clause, a money type is cast to a character type to perform a string comparison operation.

USE AdventureWorks2012;  
GO  
SELECT  BusinessEntityID,   
   SalesYTD,   
   CONVERT (varchar(12),SalesYTD,1) AS MoneyDisplayStyle1,   
   GETDATE() AS CurrentDate,   
   CONVERT(varchar(12), GETDATE(), 3) AS DateDisplayStyle3  
FROM Sales.SalesPerson  
WHERE CAST(SalesYTD AS varchar(20) ) LIKE '1%';  

결과 집합은 다음과 같습니다.Here is the result set.

BusinessEntityID SalesYTD              DisplayFormat CurrentDate             DisplayDateFormat  
---------------- --------------------- ------------- ----------------------- -----------------  
278              1453719.4653          1,453,719.47  2011-05-07 14:29:01.193 07/05/11  
280              1352577.1325          1,352,577.13  2011-05-07 14:29:01.193 07/05/11  
283              1573012.9383          1,573,012.94  2011-05-07 14:29:01.193 07/05/11  
284              1576562.1966          1,576,562.20  2011-05-07 14:29:01.193 07/05/11  
285              172524.4512           172,524.45    2011-05-07 14:29:01.193 07/05/11  
286              1421810.9242          1,421,810.92  2011-05-07 14:29:01.193 07/05/11  
288              1827066.7118          1,827,066.71  2011-05-07 14:29:01.193 07/05/11  

D.D. Uniqueidentifer 데이터 변환Converting Uniqueidentifer Data

다음 예는 uniqueidentifier 값을 char 데이터 형식으로 변환합니다.The following example converts a uniqueidentifier value to a char data type.

DECLARE @myid uniqueidentifier = NEWID();  
SELECT CONVERT(char(255), @myid) AS 'char';  

다음 예는 변환될 데이터 형식에서 해당 값이 너무 길면 데이터가 잘림을 보여 줍니다.The following example demonstrates the truncation of data when the value is too long for the data type being converted to. uniqueidentifier 형식은 36자로 제한되므로 길이가 초과된 글자는 잘립니다.Because the uniqueidentifier type is limited to 36 characters, the characters that exceed that length are truncated.

DECLARE @ID nvarchar(max) = N'0E984725-C51C-4BF4-9960-E1C80E27ABA0wrong';  
SELECT @ID, CONVERT(uniqueidentifier, @ID) AS TruncatedValue;  

결과 집합은 다음과 같습니다.Here is the result set.

String                                       TruncatedValue  
-------------------------------------------- ------------------------------------  
0E984725-C51C-4BF4-9960-E1C80E27ABA0wrong    0E984725-C51C-4BF4-9960-E1C80E27ABA0  
  
(1 row(s) affected)  

관련 항목:See also

nchar 및 nvarchar(Transact-SQL)nchar and nvarchar (Transact-SQL)
CAST 및 CONVERT(Transact-SQL)CAST and CONVERT (Transact-SQL)
COLLATE(Transact-SQL)COLLATE (Transact-SQL)
데이터 형식 변환(데이터베이스 엔진)Data Type Conversion (Database Engine)
데이터 형식(Transact-SQL)Data Types (Transact-SQL)
데이터베이스 크기 예측 Estimate the Size of a Database
데이터 정렬 및 유니코드 지원 Collation and Unicode Support
싱글바이트 및 멀티바이트 문자 집합Single-Byte and Multibyte Character Sets