백엔드

CHAR, VARCHAR, VARCHAR2 차이

음그냥 2023. 3. 25. 22:06
728x90
반응형
SMALL
CHAR
VARCHAR(2)
-장점
a. 문자의 길이가 일정할 경우(특히 1자리일 경우) 저장공간의 절약.
b. 데이터 빈번한 변경에 좋음.
-단점
a. 확장성 부족
b. 문자의 길이가 들쑥날쑥할 경우 오히려 저장공간의 낭비로 이어질 수 있음.
c. 공백때문에 인덱스 적용이 되지않아 쿼리 성능저하로 이어질 수 있음.
-장점
a. 문자의 길이가 들쑥날쑬할 경우 저장공간의 정략
b. 요건 변경에도 유연함
-단점
a. 문자의 길이가 일정할 경우 char에 비해 저장공간의 낭비가 생김
b. 빈번한 데이터 변경이 있을 경우 리소스 낭비 발생
NUMERIC
-정수, 실수 등 숫자정보(Oracle은 NUMBER로, SQL Server는 다양한 숫자 타입 지원)
-Oracle은 처음에 전체 자리 수를 지정하고, 그 다음 소수 부분의 자리 수를 지정한다.
DATE
-날짜와 시각 정보
-Oracle은 1초단위, SQL Server는 3.33ms 단위 관리

 

 

CHAR
VARCHAR
VARCHAR2
고정형
가변형
가변형
2000byte
4000byte
4000byte



1. CHAR

CHAR 데이터 타입은 고정된 문자열을 저장하는 데 사용합니다. 
테이블을 만들 때, 무조건 고정된 길이를 지정해줘야 하고 범위는 1~2000 bytes입니다.

한글의 경우 글자당 2byte이므로 1000글자가 저장가능하겠네요. 영문, 숫자의 경우 1byte입니다.

그러나 오라클에서는 캐릭터 셋에 따라서 한 글자를 3바이트로 인식하는 경우도 있다고 하니 주의해야 하겠습니다.

혹시 캐릭터 셋이나 인코딩이 궁금하신 분들은 아래 링크를 참조해 보시면 도움이 될 것 같습니다.

인코딩 이해 : https://d2.naver.com/helloworld/19187


어찌 됐든~ 잘 모르시겠거나 헷갈리시는 분은 아래의 3가지만 기억하시면 됩니다.

첫째, CHAR로 데이터 타입을 선언하게 되면 고정된 길이를 가집니다.

둘째, CHAR를 데이터 타입으로 선언한 변수에 고정된 길이보다 작은 길이의 문자를 넣어도 남은 부분을 공백으로 다 채웁니다.

셋째, 만약 더 큰 길이를 입력하게 되면 오라클 DB는 에러를 반환합니다.

즉, 2000바이트로 선언했으면 무조건 2000바이트를 가지게 되는 것입니다. 


2. VARCHAR, VARCHAR2

VARCHAR, VARCHAR2는 가변 길이로 문자열을 저장할 수 있는 데이터 타입입니다. 만약 우리가 VARCHAR2로 변수를 만들면 1~4000byte까지의 길이를 지정해줄 수 있습니다.

char와의 차이점이라면 우리가 선언한 문자열보다 더 짧은 문자열을 선언하게 될 경우 char의 경우 공백으로 남은 부분을 메꾸지만 varchar와 varchar2는 그렇지 않다는 점입니다.

그렇기 때문에, varchar2를 사용하면 메모리 상의 이점을 얻게 되어 더 많이 사용됩니다.


3. VARCHAR와 VARCHAR2 차이점

둘의 차이점이 무엇이냐면.. 없습니다.

실제로 오라클 공식 문서에는 두 데이터 타입이 synoymous, 즉 동의어라고 나와 있습니다.

그러나 varchar2를 사용하는 것을 추천드립니다. 왜냐하면 varchar는 나중에 다른 방식의 데이터 타입으로 변경될 수 있기 때문입니다.

프로그램을 만들고 운영 중인데 나중에 varchar로 선언한 것을 다 varchar2로 바꿔야 한다면 상당히 귀찮아지는 일이겠죠..?

 

 

 

 

 

출처 : https://lifelife7777.tistory.com/41

출처 : https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=zboizz&logNo=221659929914

출처: https://docs.oracle.com/cd/B28359_01/server.111/b28318/datatype.htm#CNCPT1822

728x90
LIST