본문 바로가기
Database/Oracle

CHAR ? VACHAR?

by oncerun 2021. 4. 26.
반응형

데이터베이스에서 문자를 저장하는 타입은 두 가지가 존재한다. CHAR와 VACHAR이다.

LOB은 구조화되지 않은 대형 데이터를 저장하기 때문에 대량의 문자도 포함하지만 문자를 위한 타입이라고 할 수는 없는 것 같다.

 

나는 언제 CHAR와 VACHAR를 사용해야 하는지에 대해서 고민을 했고 어떤 차이점이 존재하는지 알아보았다.

 

1. 저장역역

 

 - VARCHAR는 가변 길이를 가지고 있으므로 필요한 영역은 실제 데이터 크기만큼의 영역을 가지게 된다.

VARCHAR를 사용하기에 적합한 상황은 다음과 같은데, 길이가 다양한 칼럼과, 정의된 길이와 실제 데이터 길이에 차리가 있는 칼럼에 적합하다.

VARCHAR(10)과 같이 길이를 지정해준다는 것은 사실 LIMIT을 지정해주는 것과 같다. 

 

 -CHAR는 이와 반대로 고정된 길이를 가지고 있다. 따라서 지정된 크기 범위를 넘는다는 것은 잘못된 데이터라고 할 수 있기 때문에 DBMS가 에러를 발생시킨다. 

 

2. 문자열 비교방법

 

CHAR에서는 문자열을 비교할 때 공백(BLANK)을 채워서 비교하는 방법을 사용한다. 이때 길이가 짧은 뒷부분에 공백을 추가하여 데이터 길이를 같게 만들고 앞에서부터 차례대로 비교한다.

그와 반면 VARCHAR 유형에서는 맨 처음부터 한 문자씩 비교하고 공백도 하나의 문자로 취급하여 공백이 다르면 다른 문자로 취급한다.

 

 

따라서 비즈니스적으로 확실한 문자크기를 가진 칼럼은 CHAR로 타입을 정해주고 실제데이터와 정해진 크기와 차이가 발생할 수 있는 컬럼은 VARCHAR 타입으로 지정하되 문자열 비교에 신경을 써야 하기 때문에 데이터베이스에 저장할 때 공백을 전부 지우고 저장하는 방식으로 해야 할 것 같다.

반응형

'Database > Oracle' 카테고리의 다른 글

DBMS_RANDOM 패키지  (0) 2021.05.16
[oracle] db review  (0) 2021.05.15
ORACLE SQL NULL관련 함수  (0) 2020.04.20
ORACLE SQL 변환함수  (0) 2020.04.20
ORACLE SQL 숫자함수  (0) 2020.04.16

댓글