Skip to content

MySQL CHAR vs VARCHAR 차이점 정리

Myeongha Joo edited this page Jun 14, 2025 · 2 revisions

MySQL CHAR vs VARCHAR 차이점 정리

MySQL에서 문자열 데이터를 저장할 때 자주 사용하는 두 가지 타입 CHARVARCHAR는 저장 방식 차이가 있습니다.


기본 개념

항목 CHAR VARCHAR
정의 고정 길이 문자열 가변 길이 문자열
선언 CHAR(n) → 항상 n글자 저장 VARCHAR(n) → 최대 n글자 저장
길이 처리 부족한 길이는 공백으로 채움 실제 길이만큼 저장 (길이 정보 포함)

기본적으로 CHAR는 고정된 길이만큼 항상 저장하고, VARCHAR는 실제 문자 길이만큼 저장합니다.


저장 구조 및 공간 효율성

항목 CHAR VARCHAR
저장 공간 항상 n × 문자당 바이트 수 실제 문자 바이트 수 + 길이 정보 (1~2바이트)
길이 정보 ❌ 없음 ✅ 있음 (1바이트 또는 2바이트)
인코딩 영향 있음 (utf8mb4 등 인코딩에 따라 바이트 수 달라짐) 있음 (최대 바이트 수가 길이 정보에 영향 줌)

VARCHAR는 데이터 저장 시 길이 정보까지 동시에 저장합니다.
문자 바이트 수에 따라 1바이트 혹인 2바이트를 사용하게 됩니다. 이때 문자 바이트 수는 문자 수가 아니라 인코딩 기준에서 바이트의 수 입니다.

예: utf8mb4 인코딩 기준 (한글, 이모지 등 최대 4바이트)

  • VARCHAR(63)
    → 최대 63자 × 4바이트 = 252바이트 → 1바이트 길이 정보 사용 가능

  • VARCHAR(64)
    → 64자 × 4바이트 = 256바이트 → 2바이트 길이 정보 필요


결론

데이터 베이스에 문자열이 저장될 때 고정된 크기만큼 저장될까? 라는 궁금증에서 시작했습니다.
또한, 문자 수만큼 저장하면 굳이 varchar(16) 이렇게 선언할 필요가 있을까? 라는 궁금증도 생겼습니다.

문자 바이트 수에 따라 길이 정보 저장 공간이 달라지는 것을 확인하였고, 상황에 따라 63글자(utf8mb4기준)이하로 선언하면 저장공간을 절약할 수 있다는 것을 알게 되었습니다.
물론 요즘은 저장 공간이 부족한 시대는 아니지만, 이처럼 구조를 이해하고 의도를 담아 설계하면 더 재밌게 개발을 할 수 있을 것 같습니다~


참고 자료

MySQL 8.4 Reference Manual – The CHAR and VARCHAR Types

Clone this wiki locally