개발/DB

CHAR vs VARCHAR 차이점 정리

뇽.뇽 2025. 5. 16. 17:50
반응형
반응형

SQL Server에서 테이블을 설계할 때, 데이터 타입을 신중하게 설정하는 것이 얼마나 중요한지 직접 체감한 경험이 있어 이를 공유해 봅니다.

최근 제가 생성한 테이블에서 이상한 현상이 하나 발생했습니다.

Code라는 컬럼에 "00001" 값을 넣었는데, 값을 조회하면 "00001 "처럼 뒤에 공백이 붙어 나타나는 것이었습니다.


 문제 상황

CREATE TABLE SampleTable (
  Code CHAR(8),
  ...
);

 

위와 같이 Code 컬럼을 CHAR(8)로 정의한 상태에서 "00001" 값을 입력하면, 조회 시 아래처럼 출력됩니다.

00001   

 

총 8자리 중 나머지 3자리를 공백으로 채워 보여주고 있었던 거죠.


 원인 분석

문제의 원인은 바로 CHAR 타입의 고정 길이 특성에 있습니다.

  • CHAR(n)은 항상 고정 길이로 저장됩니다.
    • 값이 n자보다 짧으면, 자동으로 공백이 채워져 저장됩니다.
    • 이는 조회 시에도 그대로 출력됩니다.
  • 반면 VARCHAR(n)은 가변 길이 문자열로,
    • 입력한 실제 문자 수만큼만 저장되고, 공백이 추가되지 않습니다.

따라서 CHAR(8)에 "00001"을 넣으면 자동으로 "00001 " 형태가 되어버리는 것입니다.

 


해결 방법

이 문제를 해결할 수 있는 방법은 두 가지입니다.

1. 컬럼 타입을 VARCHAR로 변경

ALTER TABLE SampleTable
ALTER COLUMN Cd VARCHAR(8);

 

이렇게 하면 입력한 길이만큼만 저장되므로 공백 문제가 사라집니다.

 

2. 코드를 8자리로 맞춰 입력

 

비효율적이지만 "00001000"처럼 코드 자체를 8자리로 구성해 넣는 방식도 있습니다. 그러나 이는 유지보수성과 데이터 일관성 측면에서 권장되지 않습니다.


 CHAR vs VARCHAR 정리

항목 CHAR(n) VARCHAR(n)

길이 고정 (n자리) 가변 (최대 n자리)
저장 방식 부족한 길이는 공백으로 채움 실제 입력된 문자 수만 저장
성능 고정 길이로 빠른 처리 가능 (소량) 공간 효율적, 대량 데이터에 적합
사용 예시 국가코드, 성별 등 고정 길이 데이터 사용자 이름, 주소 등 가변 길이 데이터

정리하며

데이터베이스 테이블 설계 시 CHAR와 VARCHAR의 차이를 명확히 이해하고 사용하는 것이 중요합니다. 저처럼 공백이 생겨 문자열 비교, UI 출력 등에 오류가 생기지 않도록 꼭 적절한 타입을 선택하세요.

특히 CHAR을 사용할 때는 공백 처리에 유의하고, 가변 데이터를 다룰 때는 되도록 VARCHAR를 사용하는 습관을 들이면 좋습니다.

 

반응형