나의 발자취

(고생) VARCHAR(1), CHAR(1) 차이를 모르면... 본문

프로젝트

(고생) VARCHAR(1), CHAR(1) 차이를 모르면...

달모드 2024. 11. 27. 15:18

이렇게 "status"값이 저장된다.

 

 

실제 DB를 확인해보면 이 모든게 공백까지 포함해서 다 ... 저장된다.

 

 

보니까 status의 타입이 CHAR(1)로 저장되어서 발생하는 문제였다.

따라서 아래와 같이 고쳐줬다.

 

 

그런데 이렇게 해도 에러가 났다. 시퀄라이저는 바차를 지원하지 않기 때문에..

 

이렇게 바꾸어주었다.

 

잘 된다

그리고선 마이그레이션을 지우고 다시 실행...

1. CHAR(1)

  • 특징:
    • 고정 길이 문자열을 저장
    • 데이터 길이가 필드의 정의된 길이보다 짧으면 **빈칸(공백)**으로 채워 저장
    • 예를 들어, CHAR(1) 필드에 "A"를 저장하면 길이가 1이므로 그대로 저장됩니다. 하지만, CHAR(5)에 "A"를 저장하면 "A "로 공백이 추가됨
  • 장점:
    • 고정 길이로 저장하므로 조회 성능이 약간 더 좋다. (주로 아주 큰 데이터에서 차이가 느껴짐)
    • 길이가 일정한 데이터를 저장할 때 유리
  • 단점:
    • 고정 길이로 저장되므로, 정의된 길이보다 짧은 데이터를 저장할 경우 공간 낭비가 발생할 수 있음
    • 데이터 비교 시 공백도 포함될 수 있으므로 추가 처리가 필요

2. VARCHAR(1)

  • 특징:
    • 가변 길이 문자열을 저장
    • 데이터 길이만큼만 저장하며, 공백을 추가하지 않음
    • 예를 들어, VARCHAR(1) 필드에 "A"를 저장하면 길이 1의 데이터만 저장
  • 장점:
    • 저장 공간이 효율적입니다. 길이에 따라 저장 용량이 줄어듦
    • 데이터를 그대로 저장하므로, 공백 처리에 대한 걱정이 없음
  • 단점:
    • 가변 길이 때문에 고정 길이와 비교해 약간의 성능 손실이 있을 수 있음
    • 이 차이는 소규모 데이터에서는 거의 무시해도 될 수준

CHAR(1)와 VARCHAR(1)의 실제 차이

  • 문자열 길이가 1로 고정된 데이터('A', 'B' 등)를 저장할 때, CHAR(1)와 VARCHAR(1)의 차이는 거의 없음
  • 하지만:
    • 데이터 정밀도가 중요하다면, CHAR(1) 사용을 고려 (길이가 고정이므로 일관성 유지)
    • 공간 효율성과 데이터 유연성이 중요하다면 VARCHAR(1)를 사용
Comments