CHAR vs VARCHAR

뉴우비(newwwbi)·2026년 1월 6일

TIL

목록 보기
10/10
post-thumbnail

공통점

  • 문자열 타입.
  • 최대 저장 가능한 문자열 길이 명시 가능함.
    • ex1) CHAR(10) / VARCHAR(10) ⇒ 최대 10 글자까지 저장 가능.
    • ex2) CHAR(60) / VARCHAR(60) ⇒ 최대 60 글자까지 저장 가능.

* 참고로, 문자당 바이트 수는 문자셋에 따라 달라짐.
- Latin1 문자셋인 경우 latin1 문자만 저장 가능하며 문자당 1바이트가 할당됨.
- UTF-8 문자셋인 경우 영어는 1바이트, 한글은 3바이트, 특정 이모지는 4바이트가 할당됨.

차이점

  • 저장 공간 할당 방식.
    • CHAR: 저장되는 문자열의 길이에 관계 없이 최대로 설정된 크기만큼 저장 공간이 할당됨.
    • VARCHAR: 저장되는 문자열의 길이 만큼만 저장 공간이 할당됨.
    • (단, UTF8MB4 같은 가변 길이 문자셋일 때는 CHAR 타입도 저장되는 문자열의 길이 만큼만 저장 공간이 할당될 수 있음)
  • 저장된 값의 유효 크기 정보 저장 여부.
    • CHAR: 저장된 값의 유효 바이트 수 정보를 저장하지 않음.
    • VARCHAR: 저장된 값의 유효 바이트 수 정보를 저장하기 위해서 1~2바이트 저장 공간을 추가로 사용함.
    • (단, UTF8MB4 같은 가변 길이 문자셋일 때는 CHAR 타입도 유효 크기 정보를 저장함)

선택 기준

1. 저장되는 값의 길이가 고정되어 있는지 여부

  • 저장되는 값의 길이가 고정되어 있는 경우 → CHAR
  • 저장되는 값이 길이가 고정되어 있지 않은 경우 → VARCHAR

2. 저장되는 값의 길이 변동이 큰지 여부

  • 저장되는 값이 자주 변경되는데 길이 변동이 크지 않다면 → CHAR
  • 저장되는 값이 자주 변경되는데 길이 변동이 크다면 → VARCHAR

* 기존에 저장된 값보다 더 긴 값으로 변경되면 VARCHAR 타입의 경우 레코드 자체를 다른 공간으로 옮겨서 저장해야 하지만, CHAR 타입의 경우 빈 공간이 있기 때문에 레코드 이동 없이 바로 저장 가능함. 그렇기 때문에 길이 변동이 크지 않다면 CHAR 타입으로 정의하는게 유리함. 하지만 값의 길이 변동이 크면 CHAR 타입의 경우 공간 낭비가 발생함.

참고

profile
배운 지식을 다른 사람과 공유하고 싶습니다

0개의 댓글