CHAR vs VARCHAR
데이터베이스에서 CHAR와 VARCHAR는 문자열을 저장하기 위한 데이터 타입으로 사용된다. DB에서 문자열 타입을 사용할 때, 대부분 CHAR가 아닌 VARCHAR를 사용하는 것을 확인할 수 있다. 이 문자열 타입은 무슨 차이가 있길래 사용 빈도가 다른 건지 궁금하여 VARCHAR와 CHAR의 개념과 각 데이터 타입의 장단점을 정리해보려고 한다.
CHAR
특징
- 고정된 길이의 문자열 저장, 최대 길이 255
- 선언된 길이보다 짧은 문자열을 저장하면, 남은 공간은 공백(" ")으로 채움
- CHAR(5)에 "abc"를 저장한다면, "abc "로 저장
- 값을 받아올 때는 해당 공백은 자동으로 제거
- PAD_CHAR_TO_FULL_LENGTH를 활성화하면, 공백까지 받아옴
- 모든 문자열이 동일한 길이를 가지고 있기 때문에 읽기 성능이 일정
장단점
- 장점
- 고정된 길이로 저장되어 디스크에서 정확한 위치에 접근하기 쉽기 때문에 읽기 성능이 상대적으로 좋음
- 데이터가 길이가 일정한 문자열일 경우 유용, ex) 국가, 우편번호 등
- 단점
- CHAR 크기에 비해 적은 데이터를 사용하면, 공간 낭비 발생
- CHAR 크기에 비해 큰 데이터를 사용하면, 문자열이 잘리거나 오류 발생
VARCHAR
특징
- 가변 길이의 문자열을 저장, 최대 길이 65535
- 선언된 길이까지 저장 가능하며, 저장된 데이터 크기만큼만 공간 사용
- VARCHAR(10)에 abc를 저장하면 3자의 데이터만 저장
- 문자열 이외에 길이를 저장하기 위한 공간 필요
- 문자열의 길이를 저장하는데 255글자 이하에는 1바이트, 그 이상은 2바이트의 공간 필요
- 데이터의 길이에 따라 읽기 성능이 달라질 수 있음
장단점
- 장점
- 데이터 길이에 따라 유동적으로 공간을 사용하여 공간 효율성이 뛰어남
- 길이가 불규칙한 문자열에 적합
- 단점
- 데이터가 고정되지 않기 때문에 읽기 성능이 CHAR에 비해 약간 느림
- 길이가 자주 바뀌는 데이터에서 단편화(fragmentation) 및 파편화 발생 가능
- 단편화 : 유동적인 공간 사용으로 인해 공간은 충분하지만 할당이 불가능한 상태
- 파편화 : 기존 길이보다 더 긴 문자열로 변경하는 경우 새로운 공간에 할당하여 사용
# MySQL에서 아래의 쿼리로 CHAR Type으로 동작하도록 설정 가능
# 용량은 증가하지만, 파편화로 인한 성능 저하 방지
ALTER TABLE tblname ROW_FORMAT = FIXED;
Reference
https://velog.io/@kdh10806/CHAR-vs-VARCHAR
'CS > 데이터베이스' 카테고리의 다른 글
[DB] Redshift 특정 테이블의 권한 생성 문제 근본적인 해결법 (0) | 2024.11.19 |
---|---|
[DB] Redshift 특정 테이블의 권한이 생성되지 않는 문제 (0) | 2024.10.30 |
[DB] Redshift에 생성된 Schema와 Table 정보 확인 방법 (0) | 2024.08.06 |
[DB] 생활코딩 - 관계형 데이터 모델링 (3) | 2024.07.14 |
[DB] 프로덕션 데이터베이스 vs 데이터 웨어하우스 (0) | 2024.06.04 |