본문 바로가기
IT/DB

[ORACLE] 오라클 데이터타입 CHAR와 VARCHAR2의 차이

by 스터딩아재 2021. 10. 26.
반응형

 

* 문자형 데이터 타입 중 CHAR와 VARCHAR2의 차이를 알아보자.

 

* CHAR의 경우 아래 상황으로 인한 특수한 상황을 제외하고는 CHAR보다는 VARCHAR2 사용을 권장한다.

 

 

CHAR와 VARCHAR2의 차이

 

1) VARCHAR2 ( size BYTE | CHAR )

 

* VARCHAR2(10 BYTE), VARCHAR2(10 CHAR) 등으로 선언 가능하며 BYTE/CHAR를 입력하지 않으면 기본값은 BYTE이다.

 

* VARCHAR2는 4000byte까지 사용 가능하고, 가변길이로 10byte로 생성해도 값이 5byte면 데이터는 5byte이다.

 

img
VARCHAR2

 

* 위 사진과 같이 EDIT 모드에서 커서가 값 뒤에 붙는다.

 

 

 

2) CHAR ( size BYTE | CHAR )

 

* CHAR(10 BYTE), CHAR(10 CHAR) 등으로 선언 가능하며 BYTE/CHAR를 입력하지 않으면 기본값은 BYTE이다.

 

* 2000byte까지 사용 가능하고, 지정한 사이즈만큼 공간을 잡아준다. 10byte로 생성했는데, 5byte만 입력되면 공백을 채워 10byte가 된다.

 

img
CHAR

 

* CHAR는 EDIT 모드에서 뒤에 공백이 잡히는 걸 볼 수 있다.

 

 

 

CHAR형의 문제

* nickname CHAR(5) 선언

 

프로그램에서 WHERE 조건 오류

 

* SQL의 WHERE절이나 ON절에서 nickname = 'azae'로 찾을 경우 'azae ' = 'azae'가 되버려서 못 찾을 수 있다.

 

* 위 에러로 발생한 SQL을 DB툴에 복사해서 돌리면 상수로 비교해서 잘 도는데, 프로그램에서만 오류가 발생한다.

 

* 이는 MERGE문에서 무결성 오류를 발생시키기도 한다.

 

MERGE문 무결성 제약조건 위배의 경우 (ORA-00001)

CHAR 타입으로 인한 MERGE문 실행 시 무결성 오류가 나는 경우 * MERGE문은 조건에 만족하면 INSERT와 UPDATE로 알아서 분기된다. 두 개 이상의 세션에서 동시에 날려서 PK가 중복된 경우는 당연히 발생

studyingazae.tistory.com

 

 

CHAR보다는 VARCHAR2를 권장하는 이유
그리드형

댓글