파워노트

[TIP] Oracle CHAR(8) 은 고정자리수 .. '0' 이 아니라 '0 ' 이였다. 본문

oracle

[TIP] Oracle CHAR(8) 은 고정자리수 .. '0' 이 아니라 '0 ' 이였다.

파워킴 2022. 3. 17. 10:13
반응형

[참고]  https://kasckasc.tistory.com/entry/Oracle-CHAR-VARCHAR-VARCHAR2-%EC%B0%A8%EC%9D%B4 

 

 

* CHAR와 VARCHAR (VARCHAR2)의 비교

 

문자의 경우 CHAR와 VARCHAR의 차이는 저장 영역과 문자열의 비교 방법이다.

VARCHAR 유형은 가변 길이이므로 필요한 영역은 실제 데이터 크기뿐이다. 그렇기 때문에 길이가 다양한 컬럼과, 정의된 길이와 실제 데이터 길이에 차이가 있는 컬럼에 적합하다.

저장 측면에서도 CHAR 유형보다 작은 영역에 저장할 수 있으므로 장점이 있다.

 

비교 방법에서도 차이가 있다.

CHAR 에서는 문자열을 비교할 때 공백을 채워서 비교하는 방법을 사용한다. CHAR(8) 이고 'AA'가 저장되어 있다면, 'AA' 뒤에 공백 6자리를 붙여 8자리로 비교하는 것이다.

따라서  'AA' = 'AA  ' 은 실제로 'AA      ' = 'AA      ' 가 되어 같다는 결과가 나온다.

 

반면에 VARCHAR 에서는 공백도 하나의 문자로 취급하므로 끝에 공백이 들어가면 다른 문자로 판단한다.

같은 예로 들면 'AA' != 'AA '  로 공백이 있어 서로 다른 문자로 판단한다.

 

따라서 이름, 주소 등의 길이가 변할 수 있는 값은 VARCHAR를 사용하고,

사번, 주민등록번호와 같이 길이가 일정한 데이터는 CHAR를 사용하는게 좋다. 

 

더불어 오라클에서는 VARCHAR는 추후 별도의 데이터유형으로 사용할 예정이기에 

VARCHAR2를 사용하는 것을 권장하고 있다.

 


 

반응형
Comments