CHAR와 VARCHAR는 데이터베이스에서 문자열 데이터를 저장하는 데 사용되는 두 가지 주요 데이터 타입이다. 최대 길이는 255로 동일하다. 둘의 차이점은 아래와 같다.
1. 저장 방식
- CHAR(Character)
CHAR는 고정 길이 문자열을 저장하는 데 사용된다. 이는 지정된 길이의 문자열을 저장하며 문자열이 지정된 길이보다 짧으면 공백 문자로 채워진다. 하지만 값을 받아올 땐 공백이 제거된 상태로 받아오게 된다.
PAD_CHAR_TO_FULL_LENGTH 모드를 활성화하면 공백까지 다 읽어온다. - VARCHAR(Variable Character)
VARCHAR는 가변 길이 문자열을 저장할 때 사용된다. 이는 문자열의 실제 길이에 따라 저장 공간이 조정된다.
=> 입력된 문자열의 길이만큼만 저장하고 공백 문자로 채우지 않음
2. 저장 공간
- CHAR
항상 고정 길이로 저장되므로 지정된 길이만큼의 저장 공간이 항상 할당된다. 따라서 CHAR 열의 크기는 데이터의 길이에 관계 없이 일정하다. 이는 고정 길이의 저장 공간을 제공하므로 데이터를 읽고 쓰는 데 약간의 성능 이점이 있을 수 있지만, 데이터 낭비가 발생할 수 있다. - VARCHAR
실제 데이터의 길이에 따라 저장 공간이 가변적으로 조정된다. 이는 문자열 길이가 다양한 경우에 공간을 더 효율적으로 사용할 수 있지만, 데이터를 읽고 쓸 때 추가적인 길이 정보를 저장하기 때문에 약간의 오버헤드가 발생할 수 있다.
255자 이하에는 1byte, 그 이상은 2byte의 추가 공간을 필요로 한다.
=> 실질적인 데이터와 길이 정보도 같이 저장됨
create table TEST (
char_column char(10),
varchar_column varchar(255)
);
insert into TEST (char_column, varchar_column) values ('test', 'test');
select char_column, length(char_column) from TEST; -- 결과는 4지만 10바이트 소모
select varchar_column from TEST; -- 4byte(글자 수) + 1byte(길이 정보 저장을 위한 메모리) = 5byte 소모
select * from TEST;
3. 어떻게 사용해야 할까?
- CHAR
전화 번호, 우편 번호, 주민 등록 번호와 같이 항상 일정한 길이의 데이터를 저장해야 하는 경우에 적합하다. - VARCHAR
대부분의 텍스트 데이터, 이메일 주소, 설명 텍스트와 같이 길이가 다양한 문자열 데이터를 저장하는 데 주로 사용된다.
=> 요약하면 CHAR는 고정 길이 문자열을 저장하는 데 사용되고 VARCHAR는 가변 길이 문자열을 저장하는 데 사용된다. 선택은 데이터의 특성과 저장 공간 효율성에 따라 다를 수 있으며, 데이터베이스 설계에 적절한 선택을 하려면 데이터의 특성을 고려해야 한다.
'공부' 카테고리의 다른 글
[API] Kakao Login 구현하기 (1) (0) | 2023.10.20 |
---|---|
[SQL] Index (0) | 2023.09.30 |
Java Virtual Machine(JVM) (0) | 2023.09.17 |
JPA N+1 문제에 대하여 (BatchSize, EntityGraph) (0) | 2023.09.15 |
JPA와 JPQL (0) | 2023.09.14 |