[MySQL] CHAR vs VARCHAR

2024. 11. 25. 20:19·CS/데이터베이스

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

https://goodgid.github.io/DB-char-vs-varchar/

https://cobook.tistory.com/60

https://dev.mysql.com/doc/refman/8.4/en/char.html

'CS > 데이터베이스' 카테고리의 다른 글

[DB] Redshift 특정 테이블의 권한 생성 문제 근본적인 해결법  (0) 2024.11.19
[DB] Redshift 특정 테이블의 권한이 생성되지 않는 문제  (1) 2024.10.30
[DB] Redshift에 생성된 Schema와 Table 정보 확인 방법  (0) 2024.08.06
[DB] 생활코딩 - 관계형 데이터 모델링  (3) 2024.07.14
[DB] 프로덕션 데이터베이스 vs 데이터 웨어하우스  (0) 2024.06.04
'CS/데이터베이스' 카테고리의 다른 글
  • [DB] Redshift 특정 테이블의 권한 생성 문제 근본적인 해결법
  • [DB] Redshift 특정 테이블의 권한이 생성되지 않는 문제
  • [DB] Redshift에 생성된 Schema와 Table 정보 확인 방법
  • [DB] 생활코딩 - 관계형 데이터 모델링
기억에 남는 블로그 닉네임
기억에 남는 블로그 닉네임
  • 기억에 남는 블로그 닉네임
    얕게, 깊게
    기억에 남는 블로그 닉네임
  • 전체
    오늘
    어제
  • 블로그 메뉴

    • 홈
    • 방명록
    • 글쓰기
    • 분류 전체보기 N
      • Data Engineering
        • Airflow
        • 빅데이터
        • 자동화
        • 기타
      • Infra
        • AWS
        • Terraform
        • [인프라 구축기] Terraform 활용 AWS ..
      • CS
        • 자료구조
        • 알고리즘
        • 네트워크
        • 데이터베이스
        • 이것이 취업을 위한 코딩 테스트다 with 파이썬
      • Python
      • Web
      • Git
      • 기타 N
        • 취업 & 진로
        • 회고록 N
        • 기타
      • 프로젝트 단위 공부
        • [부스트코스] DataLit : 데이터 다루기
        • [개인 프로젝트] 공모전 크롤링
        • [개인 프로젝트] FC Online 공식 경기 분..
        • 프로젝트 개선 방안
      • [프로그래머스] 데이터 엔지니어링 데브코스 3기
        • TIL(Today I Learn)
        • 숙제
        • 기타
      • 알고리즘 연습
        • 프로그래머스
        • 백준
  • 링크

    • 깃허브
    • 링크드인
  • 인기 글

  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
기억에 남는 블로그 닉네임
[MySQL] CHAR vs VARCHAR
상단으로

티스토리툴바