오라클에서는 문자를 저장하기 위한 데이터 타입이 여러 가지가 존재한다.
이 중 4가지 CHAR, VARCHAR, VARCHAR2, NVARCHAR2 의 차이점에 대해 알아보자.
CHAR는 고정형 길이의 문자 데이터 유형으로 2000byte까지 길이를 지정할 수 있으며 기본값은 1byte이다. 고정형이므로 길이를 지정하면 문자 길이가 지정된 길이보다 짧을 때 나머지 부분을 공백으로 채워 모두 같은 길이를 유지하기 때문에 메모리 낭비가 일어날 가능성이 높다.
예를 들어,
CHAR(4)로 지정하고 '123'과 '123 '을 넣어도 채워지지 않은 길이는 공백으로 채우기 때문에
'123' = '123 ' 이라는 결과가 나오게 된다.
VARCHAR는 가변형 문자 데이터 유형으로 ANSI 표준이라는 미국 표준 협회에서 만든 표준 SQL문에 있는 타입이다. VARCHAR는 최대 4000byte까지 저장할 수 있으며, ANSI 표준에 따르면 NULL과 빈 문자열을 구분할 수 있는 데이터 유형이지만 현재 오라클에서는 구분할 수 없고 VARCHAR2와 동일하게 사용된다. 하지만 향후 Oracle에서 정의나 구현을 변경할 예정이므로 사용을 지양하는 것이 좋다.
VARCHAR2 또한 VARCHAR와 같이 가변형이며 4000byte 까지 지정가능하다. VARCHAR2는 Oracle 표준으로 Oracle에서는 VARCHAR보다 VARCHAR2를 사용하는 것을 권장하고 있다. VARCHAR와 VARCHAR2는 가변형이기 때문에 메모리를 효율적으로 사용할 수 있다. ASCII 코드를 기반으로 하기 때문에 글자를 byte 단위(영어, 숫자는 1byte, 한글, 한자는 2byte)로 저장한다.
VARCHAR2는 가변형 길이이므로 VARCHAR2(4)에 '123'과 '123 '을 넣으면 byte만큼 할당되기 때문에
'123' <> '123 ' 이라는 결과가 나오게 된다.
NVARCHAR2는 가변형 문자 데이터 유형이지만 유니코드를 기반으로 하기 때문에 영어, 한글 상관없이 모두 2byte로 처리하여 길이를 지정할 때 바이트 수가 아닌 문자 갯수로 지정한다. NVARCHAR2가 나옴으로써 기존에 VARCHAR2를 사용할 때 데이터가 잘리지 않도록 하기 위해 길이를 1.2 ~ 1.5배로 지정하던 것을 해결할 수 있게 되었다.