[DB] CHAR, VARCHAR vs NCHAR, NVARCHAR

일반 문자열 (CHAR, VARCHAR)

 

먼저 일반 문자열인 CHAR와 VARCHAR에 대해 알아보도록 하겠습니다. 

CHAR나 VARCHAR 앞에 'N'이 붙지 않은경우 일반 문자열입니다.  

 

이 일반 문자열을 사용할 경우 데이터를 정의할 때, 바이트 수를 신경써주셔야 합니다.

 

일반적으로 영문 1바이트, 한글(유니코드)는 2바이트 입니다.

 

CHAR

=> 고정 문자열 + 일반 문자열

EX) char(100)으로 지정하고, "abc"를 입력하면 항상 100byte의 영역을 확보합니다. (97바이트 낭비)

 

 

VARCHAR

=> 가변문자열 + 일반 문자열

EX) varchar(100)으로 지정하고, "abc"를 입력하면 3byte의 영역을 확보합니다. (낭비 X)

 

 

CHAR, VARCHAR의 경우 한글(2바이트)

 

EX) CHAR('일이삼사오') => 10바이트

EX) VARCHAR('일이삼사오') => 10바이트

 

 

 

 

유니코드 문자열 (NCHAR, NVARCHAR)

 

CHAR나 VARCHAR 앞에 'N'이 붙은 경우 유니코드 문자열입니다. 

이 유니코드 문자열을 사용할 경우 데이터를 정의할 때, 글자 수를 신경써주시면 됩니다.

NCHAR(3)/NVARCHAR(3)으로 지정할 시 한글이든 영문이든 무조건 3글자를 저장할 수 있습니다. (일반 문자열 보다 직관적)

 

위의 예에서 일반문자열 CHAR와 VARCHAR로 영어를 표현할 경우 1바이트를, 한글을 표현할 경우 2바이트를 할당 해주었습니다. 하지만 이 유니코드 문자열(NCHAR, NVARCHAR)에선 영어든 한글이든 모두 2바이트를 할당합니다. 때문에 영어만 사용할 경우 일반 문자열(CHAR, VARCHAR)을 사용하는 것이 성능 향상에 도움이 됩니다.

 

 

 

 

 

요약

 

1. CHAR/VARCHAR는 바이트 수를, NCHAR/NVARCHAR는 글자수를 표현합니다.

 

2. NCHAR/NVARCHAR가 단순하고 명료하지만 한글(유니코드)를 저장하지 않는 것이라면 CHAR/VARCHAR를 사용하는 것이 공간을 더 적게 차지하므로 성능향상에 도움이 됩니다.

 

'IT > DB' 카테고리의 다른 글

[DB] 악성 쿼리문이란?  (0) 2020.05.23
[DB] 트리거(Trigger)  (0) 2020.05.22
[DB] 뷰(View)  (0) 2020.05.22

댓글

Designed by JB FACTORY