-
Notifications
You must be signed in to change notification settings - Fork 0
MySQL CHAR vs VARCHAR 차이점 정리
Myeongha Joo edited this page Jun 14, 2025
·
2 revisions
MySQL에서 문자열 데이터를 저장할 때 자주 사용하는 두 가지 타입 CHAR
와 VARCHAR
는 저장 방식 차이가 있습니다.
항목 | 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기준)이하로 선언하면 저장공간을 절약할 수 있다는 것을 알게 되었습니다.
물론 요즘은 저장 공간이 부족한 시대는 아니지만, 이처럼 구조를 이해하고 의도를 담아 설계하면 더 재밌게 개발을 할 수 있을 것 같습니다~