본문 바로가기
Dev/MSSql

[MSSQL] CHAR/VARCHAR, NCHAR/NVARCHAR 문자 데이터 형식 비교

by 데브길길잇 2023. 1. 4.
728x90
반응형

 

안녕하세요 길길IT입니다.

 

MSSQL 쿼리를 다루다보면 가장 많이 쓰는 데이터 타입이 있습니다. 바로 문자를 다루는 데이터 형식인 CHAR, VARCHAR, NCHAR, NVARCHAR가 그것인데요. 비슷하게 생겼지만 각각 어떤 특징이 있는지, 어떤 상황에서 각각 사용해야 효율적으로 데이터를 조회하고 결과를 얻을 수 있는지 용도가 다릅니다. 

 

오늘은 이 4가지 형식을 비교하여 소개해드리도록 하겠습니다.

 

※ 목차
1. MSSQL CHAR / VARCHAR 문자 데이터 형식 비교
2. MSSQL NCHAR / NVARCHAR 문자 데이터 형식 비교

 


1. MSSQL CHAR / VARCHAR 문자 데이터 형식 비교

MSSQL에서 CHAR 형식은 고정길이 문자형을 나타내고, VARCHAR는 가변길이 문자형을 나타냅니다.

고정길이라는 것은 할당된 값 전체가 어떤 데이터가 입력되어도 변함없이 계속 유지가 되는 것이며,

가변길이라는 것은 할당된 값만큼으로 길이가 변하는 데이터 형식을 의미합니다.

 

예를 들어, @Test_CHAR 변수에 CHAR(10)만큼, @Test_VARCHAR 변수에 VARCHAR(10) 할당을 해두고 ABC라는 문자를 두 변수에 입력해보겠습니다. 그리고나서 LEN함수를 이용해서 각각의 변수에 입력된 데이터 길이를 구하고

DATALENNTH 함수를 이용하여 실제 변수의 크기를 비교해보도록 하겠습니다. 

 

위 결과를 보시게 되면 ABC라는 값이 입력되었고 영어 알파벳은 글자 1개당 1byte를 차지하게 되므로 3byte의 길이를 사용하고 있음을 LEN쪽에서 확인하실 수 있는데요.

 

DATALENGTH의 결과값은 차이를 보이고 있습니다. CHAR(10)의 경우 입력된 값과 상관 없이 10byte를 차지하고 있는 것이며, VARCHAR(10)의 경우 최대 10byte까지 값을 입력받을 수 있지만 현재 입력된 데이터에 따라서 사이즈가 변하고 있습니다. ABC 3byte를 입력받았기 때문에 실제 변수의 크기도 3byte로 변하게 되었습니다.

 

한글의 경우는 어떨까요. 한글은 영어와 다르게 1글자당 2byte를 소비합니다. 

 

따라서 똑같이 결과를 조회해보면 나머지는 동일한데 VARCHAR 데이터 형식에서 실제로 할당된 변수의 크기는 6Byte가 된 것을 확인하실 수 있습니다.

 

이처럼 VARCHAR는 유동적으로 변수의 크기를 관리할 수 있어 용량 확보에는 좋지만 그만큼 성능은 CHAR보다 떨어지게 되므로, 4글자 미만을 저장하는 대용량 데이터베이스의 경우는 CHAR 형식을 설정하는 것이 훨씬 좋은 성능을 보여줍니다.


2. MSSQL NCHAR / NVARCHAR 문자 데이터 형식 비교

그렇다면 N이 붙은 NCHAR와 NVARCHAR 형식은 어떤 문자 데이터 형식일까요?

 

위에서 보셨듯 저장되는 데이터의 형식이 알파벳인지 한글인지에 따라서 소비되는 변수의 Byte 크기가 다르므로, 만약 입력되는 데이터가 한글이라면 변수는 2배의 크기를 준비해야합니다. 

 

다행스럽게도 개발자가 입력값을 미리 정의할 수 있다면 좋겠지만, 그렇지 않은 경우들이 대부분입니다. 이럴 때 사용하는 것이 바로 NCHAR, NVARCHAR입니다.

 

NCHAR는 유니코드 고정 길이 문자형, NVARCHAR는 유니코드 가변 길이 문자형입니다.

 

첫 번째 상황과 동일한 예제를 실행해본다고 하면, size에서 변화가 있는 것을 확인하실 수 있는데요. NCHAR(10)이면 실제 데이터가 들어가는 길이는 10개까지만 가능하나 size가 2배가 된 것을 보실 수 있습니다. 이렇게 미리 용량을 확보해놓기 때문에 영어나 한글 어떤 문자가 들어와도 변수의 타입을 수정할 필요 없이 입력 받는 것이 가능해집니다.

 

동일한 상황에서 NCHAR, NVARCHAR로 지정된 변수에 영어, 한글 어떤 값을 받더라도 사이즈는 동일하게 2배를 소비하고 있게 됩니다.

 

만약에 사용자들이 입력하는 값이 한글(유니코드)가 아니고 100% 영어만 저장한다고 하면 CHAR/VARCHAR를 사용하는 것이 공간을 적게 차지하므로 성능에 좋지만 그렇지 않은 경우는 NCHAR/NVARCHAR를 사용하는 것이 사용성 측면에서 좋습니다.


 

마무리

오늘은 MSSQL에서 사용하는 CHAR/VARCHAR, NCHAR/NVARCHAR 문자 데이터 형식 비교를 해보았습니다.

 

4바이트 미만의 데이터를 쓸 때는 CHAR, NCHAR 형태를,

입력값이 100% 영어라면 CHAR,VARCHAR를,

입력값이 어떤 언어인지 모르면 NCHAR, NVARCHAR를 사용하시는 것이 좋습니다.

 

어떤게 딱 좋다라기보다는 각각의 상황에 맞게 최적의 방법을 찾아 설계하신다면 사용의 편리함과 효율성, 성능 3가지의 지표를 골고루 가져가실 수 있지 않을까 생각합니다.

 

오늘도 읽어주셔서 감사합니다.

 

 

728x90
반응형

댓글