[DB] CHAR, VARCHAR vs NCHAR, NVARCHAR
- IT/DB
- 2020. 5. 23.
일반 문자열 (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 |